diff --git a/packages/0x.js/CHANGELOG.json b/packages/0x.js/CHANGELOG.json index afce91210b..2737dd5bd9 100644 --- a/packages/0x.js/CHANGELOG.json +++ b/packages/0x.js/CHANGELOG.json @@ -1,4 +1,13 @@ [ + { + "version": "9.0.4", + "changes": [ + { + "note": "Update exports.", + "pr": 2432 + } + ] + }, { "timestamp": 1578272714, "version": "9.0.3", diff --git a/packages/0x.js/src/index.ts b/packages/0x.js/src/index.ts index 627958b150..83392c3039 100644 --- a/packages/0x.js/src/index.ts +++ b/packages/0x.js/src/index.ts @@ -30,6 +30,7 @@ export { ERC721TokenApprovalEventArgs, ERC721TokenApprovalForAllEventArgs, ERC721TokenContract, + ExchangeOwnershipTransferredEventArgs, ExchangeProtocolFeeCollectorAddressEventArgs, ExchangeProtocolFeeMultiplierEventArgs, ExchangeTransactionExecutionEventArgs, diff --git a/packages/asset-swapper/CHANGELOG.json b/packages/asset-swapper/CHANGELOG.json index ff6dcde815..0206c8baa7 100644 --- a/packages/asset-swapper/CHANGELOG.json +++ b/packages/asset-swapper/CHANGELOG.json @@ -1,4 +1,17 @@ [ + { + "version": "4.0.0", + "changes": [ + { + "note": "Upgrade to new `Forwarder` contract with flat affiliate fees.", + "pr": 2432 + }, + { + "note": "Remove `getSmartContractParamsOrThrow()` from `SwapQuoteConsumer`s.", + "pr": 2432 + } + ] + }, { "version": "3.0.3", "changes": [ diff --git a/packages/asset-swapper/src/constants.ts b/packages/asset-swapper/src/constants.ts index b58dea7b02..2d30c5300a 100644 --- a/packages/asset-swapper/src/constants.ts +++ b/packages/asset-swapper/src/constants.ts @@ -73,7 +73,6 @@ export const constants = { DEFAULT_ORDER_PRUNER_OPTS, ETHER_TOKEN_DECIMALS: 18, ONE_AMOUNT: new BigNumber(1), - MAX_AFFILIATE_FEE_PERCENTAGE: 0.05, ONE_SECOND_MS, DEFAULT_SWAP_QUOTER_OPTS, DEFAULT_FORWARDER_SWAP_QUOTE_GET_OPTS, diff --git a/packages/asset-swapper/src/index.ts b/packages/asset-swapper/src/index.ts index 8323f6bdb4..5327764bbc 100644 --- a/packages/asset-swapper/src/index.ts +++ b/packages/asset-swapper/src/index.ts @@ -14,7 +14,6 @@ export { export { APIOrder, Asset, AssetPairsItem, Order, SignedOrder } from '@0x/types'; export { BigNumber } from '@0x/utils'; export { - ConstructorStateMutability, DataItem, EIP1193Event, EIP1193Provider, @@ -24,8 +23,6 @@ export { JSONRPCRequestPayload, JSONRPCResponseError, JSONRPCResponsePayload, - MethodAbi, - StateMutability, SupportedProvider, TupleDataItem, Web3JsProvider, @@ -45,7 +42,6 @@ export { LiquidityForTakerMakerAssetDataPair, MarketBuySwapQuote, MarketSellSwapQuote, - SmartContractParamsInfo, SwapQuote, SwapQuoteConsumerBase, SwapQuoteConsumerOpts, diff --git a/packages/asset-swapper/src/quote_consumers/exchange_swap_quote_consumer.ts b/packages/asset-swapper/src/quote_consumers/exchange_swap_quote_consumer.ts index a933d38596..70fc601427 100644 --- a/packages/asset-swapper/src/quote_consumers/exchange_swap_quote_consumer.ts +++ b/packages/asset-swapper/src/quote_consumers/exchange_swap_quote_consumer.ts @@ -1,16 +1,13 @@ import { ContractAddresses } from '@0x/contract-addresses'; import { ExchangeContract } from '@0x/contract-wrappers'; -import { AbiEncoder, providerUtils } from '@0x/utils'; +import { providerUtils } from '@0x/utils'; import { SupportedProvider, ZeroExProvider } from '@0x/web3-wrapper'; -import { MethodAbi } from 'ethereum-types'; import * as _ from 'lodash'; import { constants } from '../constants'; import { CalldataInfo, - ExchangeSmartContractParams, MarketOperation, - SmartContractParamsInfo, SwapQuote, SwapQuoteConsumerBase, SwapQuoteConsumerOpts, @@ -19,9 +16,8 @@ import { } from '../types'; import { assert } from '../utils/assert'; import { swapQuoteConsumerUtils } from '../utils/swap_quote_consumer_utils'; -import { utils } from '../utils/utils'; -export class ExchangeSwapQuoteConsumer implements SwapQuoteConsumerBase { +export class ExchangeSwapQuoteConsumer implements SwapQuoteConsumerBase { public readonly provider: ZeroExProvider; public readonly chainId: number; @@ -42,76 +38,27 @@ export class ExchangeSwapQuoteConsumer implements SwapQuoteConsumerBase, + _opts: Partial = {}, ): Promise { assert.isValidSwapQuote('quote', quote); - - const { toAddress, methodAbi, ethAmount, params } = await this.getSmartContractParamsOrThrowAsync(quote, opts); - - const abiEncoder = new AbiEncoder.Method(methodAbi); - - const { orders, signatures } = params; - let args: any[]; - if (params.type === MarketOperation.Buy) { - const { makerAssetFillAmount } = params; - args = [orders, makerAssetFillAmount, signatures]; - } else { - const { takerAssetFillAmount } = params; - args = [orders, takerAssetFillAmount, signatures]; - } - const calldataHexString = abiEncoder.encode(args, { shouldOptimize: true }); - return { - calldataHexString, - methodAbi, - toAddress, - ethAmount, - }; - } - - public async getSmartContractParamsOrThrowAsync( - quote: SwapQuote, - _opts: Partial = {}, - ): Promise> { - assert.isValidSwapQuote('quote', quote); - const { orders } = quote; - const signatures = _.map(orders, o => o.signature); - let params: ExchangeSmartContractParams; - let methodName: string; - + let calldataHexString; if (quote.type === MarketOperation.Buy) { - const { makerAssetFillAmount } = quote; - - params = { - orders, - signatures, - makerAssetFillAmount, - type: MarketOperation.Buy, - }; - - methodName = 'marketBuyOrdersFillOrKill'; + calldataHexString = this._exchangeContract + .marketBuyOrdersFillOrKill(orders, quote.makerAssetFillAmount, signatures) + .getABIEncodedTransactionData(); } else { - const { takerAssetFillAmount } = quote; - - params = { - orders, - signatures, - takerAssetFillAmount, - type: MarketOperation.Sell, - }; - - methodName = 'marketSellOrdersFillOrKill'; + calldataHexString = this._exchangeContract + .marketSellOrdersNoThrow(orders, quote.takerAssetFillAmount, signatures) + .getABIEncodedTransactionData(); } - const methodAbi = utils.getMethodAbiFromContractAbi(this._exchangeContract.abi, methodName) as MethodAbi; - return { - params, - toAddress: this._exchangeContract.address, - methodAbi, + calldataHexString, ethAmount: quote.worstCaseQuoteInfo.protocolFeeInWeiAmount, + toAddress: this._exchangeContract.address, }; } @@ -133,6 +80,7 @@ export class ExchangeSwapQuoteConsumer implements SwapQuoteConsumerBase o.signature); const finalTakerAddress = await swapQuoteConsumerUtils.getTakerAddressOrThrowAsync(this.provider, opts); const value = ethAmount || quote.worstCaseQuoteInfo.protocolFeeInWeiAmount; @@ -140,7 +88,7 @@ export class ExchangeSwapQuoteConsumer implements SwapQuoteConsumerBase o.signature)) + .marketBuyOrdersFillOrKill(orders, makerAssetFillAmount, signatures) .sendTransactionAsync({ from: finalTakerAddress, gas: gasLimit, @@ -150,7 +98,7 @@ export class ExchangeSwapQuoteConsumer implements SwapQuoteConsumerBase o.signature)) + .marketSellOrdersFillOrKill(orders, takerAssetFillAmount, signatures) .sendTransactionAsync({ from: finalTakerAddress, gas: gasLimit, diff --git a/packages/asset-swapper/src/quote_consumers/forwarder_swap_quote_consumer.ts b/packages/asset-swapper/src/quote_consumers/forwarder_swap_quote_consumer.ts index c3be9e86c0..dce4e9c982 100644 --- a/packages/asset-swapper/src/quote_consumers/forwarder_swap_quote_consumer.ts +++ b/packages/asset-swapper/src/quote_consumers/forwarder_swap_quote_consumer.ts @@ -1,17 +1,14 @@ import { ContractAddresses } from '@0x/contract-addresses'; import { ForwarderContract } from '@0x/contract-wrappers'; import { assetDataUtils } from '@0x/order-utils'; -import { AbiEncoder, providerUtils } from '@0x/utils'; +import { providerUtils } from '@0x/utils'; import { SupportedProvider, ZeroExProvider } from '@0x/web3-wrapper'; -import { MethodAbi } from 'ethereum-types'; import * as _ from 'lodash'; import { constants } from '../constants'; import { CalldataInfo, - ForwarderSmartContractParams, MarketOperation, - SmartContractParamsInfo, SwapQuote, SwapQuoteConsumerBase, SwapQuoteConsumerOpts, @@ -21,9 +18,8 @@ import { import { affiliateFeeUtils } from '../utils/affiliate_fee_utils'; import { assert } from '../utils/assert'; import { swapQuoteConsumerUtils } from '../utils/swap_quote_consumer_utils'; -import { utils } from '../utils/utils'; -export class ForwarderSwapQuoteConsumer implements SwapQuoteConsumerBase { +export class ForwarderSwapQuoteConsumer implements SwapQuoteConsumerBase { public readonly provider: ZeroExProvider; public readonly chainId: number; @@ -54,91 +50,40 @@ export class ForwarderSwapQuoteConsumer implements SwapQuoteConsumerBase = {}, ): Promise { assert.isValidForwarderSwapQuote('quote', quote, this._getEtherTokenAssetDataOrThrow()); - - const { toAddress, methodAbi, ethAmount, params } = await this.getSmartContractParamsOrThrowAsync(quote, opts); - - const abiEncoder = new AbiEncoder.Method(methodAbi); - const { orders, signatures, feePercentage, feeRecipient } = params; - - let args: any[]; - if (params.type === MarketOperation.Buy) { - const { makerAssetFillAmount } = params; - args = [orders, makerAssetFillAmount, signatures, feePercentage, feeRecipient]; - } else { - args = [orders, signatures, feePercentage, feeRecipient]; - } - const calldataHexString = abiEncoder.encode(args, { shouldOptimize: true }); - return { - calldataHexString, - methodAbi, - toAddress, - ethAmount, - }; - } - - /** - * Given a SwapQuote, returns 'SmartContractParamsInfo' for a forwarder extension call. See type definition of CalldataInfo for more information. - * @param quote An object that conforms to SwapQuote. See type definition for more information. - * @param opts Options for getting SmartContractParams. See type definition for more information. - */ - public async getSmartContractParamsOrThrowAsync( - quote: SwapQuote, - opts: Partial = {}, - ): Promise> { - assert.isValidForwarderSwapQuote('quote', quote, this._getEtherTokenAssetDataOrThrow()); - - const { extensionContractOpts } = _.merge({}, constants.DEFAULT_FORWARDER_SWAP_QUOTE_GET_OPTS, opts); - + const { extensionContractOpts } = { ...constants.DEFAULT_FORWARDER_SWAP_QUOTE_GET_OPTS, ...opts }; assert.isValidForwarderExtensionContractOpts('extensionContractOpts', extensionContractOpts); - const { feeRecipient, feePercentage } = extensionContractOpts; - const { orders, worstCaseQuoteInfo } = quote; - // lowercase input addresses const normalizedFeeRecipientAddress = feeRecipient.toLowerCase(); - const signatures = _.map(orders, o => o.signature); - - const formattedFeePercentage = utils.numberPercentageToEtherTokenAmountPercentage(feePercentage); - - let params: ForwarderSmartContractParams; - let methodName: string; - - if (quote.type === MarketOperation.Buy) { - const { makerAssetFillAmount } = quote; - - params = { - orders, - makerAssetFillAmount, - signatures, - feePercentage: formattedFeePercentage, - feeRecipient: normalizedFeeRecipientAddress, - type: MarketOperation.Buy, - }; - - methodName = 'marketBuyOrdersWithEth'; - } else { - params = { - orders, - signatures, - feePercentage: formattedFeePercentage, - feeRecipient: normalizedFeeRecipientAddress, - type: MarketOperation.Sell, - }; - methodName = 'marketSellOrdersWithEth'; - } - const methodAbi = utils.getMethodAbiFromContractAbi(this._forwarder.abi, methodName) as MethodAbi; - const ethAmountWithFees = affiliateFeeUtils.getTotalEthAmountWithAffiliateFee( worstCaseQuoteInfo, feePercentage, ); + const feeAmount = affiliateFeeUtils.getFeeAmount(worstCaseQuoteInfo, feePercentage); + + let calldataHexString; + if (quote.type === MarketOperation.Buy) { + calldataHexString = this._forwarder + .marketBuyOrdersWithEth( + orders, + quote.makerAssetFillAmount, + signatures, + [feeAmount], + [normalizedFeeRecipientAddress], + ) + .getABIEncodedTransactionData(); + } else { + calldataHexString = this._forwarder + .marketSellOrdersWithEth(orders, signatures, [feeAmount], [normalizedFeeRecipientAddress]) + .getABIEncodedTransactionData(); + } + return { - params, + calldataHexString, toAddress: this._forwarder.address, ethAmount: ethAmountWithFees, - methodAbi, }; } @@ -153,11 +98,10 @@ export class ForwarderSwapQuoteConsumer implements SwapQuoteConsumerBase { assert.isValidForwarderSwapQuote('quote', quote, this._getEtherTokenAssetDataOrThrow()); - const { ethAmount: providedEthAmount, takerAddress, gasLimit, extensionContractOpts } = _.merge( - {}, - constants.DEFAULT_FORWARDER_SWAP_QUOTE_EXECUTE_OPTS, - opts, - ); + const { ethAmount: providedEthAmount, takerAddress, gasLimit, extensionContractOpts } = { + ...constants.DEFAULT_FORWARDER_SWAP_QUOTE_EXECUTE_OPTS, + ...opts, + }; assert.isValidForwarderExtensionContractOpts('extensionContractOpts', extensionContractOpts); @@ -172,42 +116,35 @@ export class ForwarderSwapQuoteConsumer implements SwapQuoteConsumerBase o.signature); // get taker address const finalTakerAddress = await swapQuoteConsumerUtils.getTakerAddressOrThrowAsync(this.provider, opts); // if no ethAmount is provided, default to the worst totalTakerAssetAmount - const ethAmountWithFees = affiliateFeeUtils.getTotalEthAmountWithAffiliateFee( - worstCaseQuoteInfo, - feePercentage, - ); - // format fee percentage - const formattedFeePercentage = utils.numberPercentageToEtherTokenAmountPercentage(feePercentage); + const ethAmountWithFees = + providedEthAmount || + affiliateFeeUtils.getTotalEthAmountWithAffiliateFee(quote.worstCaseQuoteInfo, feePercentage); + const feeAmount = affiliateFeeUtils.getFeeAmount(quote.worstCaseQuoteInfo, feePercentage); let txHash: string; if (quote.type === MarketOperation.Buy) { const { makerAssetFillAmount } = quote; txHash = await this._forwarder - .marketBuyOrdersWithEth( - orders, - makerAssetFillAmount, - orders.map(o => o.signature), - formattedFeePercentage, - feeRecipient, - ) + .marketBuyOrdersWithEth(orders, makerAssetFillAmount, signatures, [feeAmount], [feeRecipient]) .sendTransactionAsync({ from: finalTakerAddress, gas: gasLimit, gasPrice, - value: providedEthAmount || ethAmountWithFees, + value: ethAmountWithFees, }); } else { txHash = await this._forwarder - .marketSellOrdersWithEth(orders, orders.map(o => o.signature), formattedFeePercentage, feeRecipient) + .marketSellOrdersWithEth(orders, signatures, [feeAmount], [feeRecipient]) .sendTransactionAsync({ from: finalTakerAddress, gas: gasLimit, gasPrice, - value: providedEthAmount || ethAmountWithFees, + value: ethAmountWithFees, }); } // TODO(dorothy-zbornak): Handle signature request denied diff --git a/packages/asset-swapper/src/quote_consumers/swap_quote_consumer.ts b/packages/asset-swapper/src/quote_consumers/swap_quote_consumer.ts index df8fce968d..eb1e94dd81 100644 --- a/packages/asset-swapper/src/quote_consumers/swap_quote_consumer.ts +++ b/packages/asset-swapper/src/quote_consumers/swap_quote_consumer.ts @@ -8,8 +8,6 @@ import { CalldataInfo, ExtensionContractType, GetExtensionContractTypeOpts, - SmartContractParams, - SmartContractParamsInfo, SwapQuote, SwapQuoteConsumerBase, SwapQuoteConsumerOpts, @@ -22,7 +20,7 @@ import { swapQuoteConsumerUtils } from '../utils/swap_quote_consumer_utils'; import { ExchangeSwapQuoteConsumer } from './exchange_swap_quote_consumer'; import { ForwarderSwapQuoteConsumer } from './forwarder_swap_quote_consumer'; -export class SwapQuoteConsumer implements SwapQuoteConsumerBase { +export class SwapQuoteConsumer implements SwapQuoteConsumerBase { public readonly provider: ZeroExProvider; public readonly chainId: number; @@ -63,20 +61,6 @@ export class SwapQuoteConsumer implements SwapQuoteConsumerBase = {}, - ): Promise> { - assert.isValidSwapQuote('quote', quote); - const consumer = await this._getConsumerForSwapQuoteAsync(opts); - return consumer.getSmartContractParamsOrThrowAsync(quote, opts); - } - /** * Given a SwapQuote and desired rate (in takerAsset), attempt to execute the swap with 0x extension or exchange contract. * @param quote An object that conforms to SwapQuote. See type definition for more information. @@ -108,9 +92,7 @@ export class SwapQuoteConsumer implements SwapQuoteConsumerBase, - ): Promise> { + private async _getConsumerForSwapQuoteAsync(opts: Partial): Promise { if (opts.useExtensionContract === ExtensionContractType.Forwarder) { return this._forwarderConsumer; } diff --git a/packages/asset-swapper/src/types.ts b/packages/asset-swapper/src/types.ts index 53b4552adc..f2497980f7 100644 --- a/packages/asset-swapper/src/types.ts +++ b/packages/asset-swapper/src/types.ts @@ -1,6 +1,5 @@ import { SignedOrder } from '@0x/types'; import { BigNumber } from '@0x/utils'; -import { MethodAbi } from 'ethereum-types'; import { GetMarketOrdersOpts } from './utils/market_operation_utils/types'; @@ -47,58 +46,15 @@ export interface SignedOrderWithFillableAmounts extends SignedOrder { /** * Represents the metadata to call a smart contract with calldata. * calldataHexString: The hexstring of the calldata. - * methodAbi: The ABI of the smart contract method to call. * toAddress: The contract address to call. * ethAmount: The eth amount in wei to send with the smart contract call. */ export interface CalldataInfo { calldataHexString: string; - methodAbi: MethodAbi; toAddress: string; ethAmount: BigNumber; } -/** - * Represents the metadata to call a smart contract with parameters. - * params: The metadata object containing all the input parameters of a smart contract call. - * toAddress: The contract address to call. - * ethAmount: If provided, the eth amount in wei to send with the smart contract call. - * methodAbi: The ABI of the smart contract method to call with params. - */ -export interface SmartContractParamsInfo { - params: T; - toAddress: string; - ethAmount: BigNumber; - methodAbi: MethodAbi; -} - -/** - * orders: An array of objects conforming to SignedOrder. These orders can be used to cover the requested assetBuyAmount plus slippage. - * signatures: An array of signatures that attest that the maker of the orders in fact made the orders. - */ -export interface SmartContractParamsBase { - orders: SignedOrder[]; - signatures: string[]; -} - -/** - * makerAssetFillAmount: The amount of makerAsset to swap for. - * type: String specifiying which market operation will be performed with the provided parameters. (In this case a market buy operation) - */ -export interface ExchangeMarketBuySmartContractParams extends SmartContractParamsBase { - makerAssetFillAmount: BigNumber; - type: MarketOperation.Buy; -} - -/** - * takerAssetFillAmount: The amount of takerAsset swapped for makerAsset. - * type: String specifiying which market operation will be performed with the provided parameters. (In this case a market sell operation) - */ -export interface ExchangeMarketSellSmartContractParams extends SmartContractParamsBase { - takerAssetFillAmount: BigNumber; - type: MarketOperation.Sell; -} - /** * Represents the varying smart contracts that can consume a valid swap quote */ @@ -107,11 +63,6 @@ export enum ExtensionContractType { None = 'NONE', } -/** - * Represents all the parameters to interface with 0x exchange contracts' marketSell and marketBuy functions. - */ -export type ExchangeSmartContractParams = ExchangeMarketBuySmartContractParams | ExchangeMarketSellSmartContractParams; - /** * feePercentage: Optional affiliate fee percentage used to calculate the eth amount paid to fee recipient. * feeRecipient: The address where affiliate fees are sent. Defaults to null address (0x000...000). @@ -121,41 +72,13 @@ export interface ForwarderSmartContractParamsBase { feeRecipient: string; } -export interface ForwarderMarketBuySmartContractParams - extends ExchangeMarketBuySmartContractParams, - ForwarderSmartContractParamsBase {} - -// Temporary fix until typescript is upgraded to ^3.5 -type Omit = Pick>; - -export interface ForwarderMarketSellSmartContractParams - extends Omit, - ForwarderSmartContractParamsBase {} - -/** - * Represents all the parameters to interface with 0x forwarder extension contract marketSell and marketBuy functions. - */ -export type ForwarderSmartContractParams = - | ForwarderMarketBuySmartContractParams - | ForwarderMarketSellSmartContractParams; - -/** - * Object containing all the parameters to interface with 0x exchange contracts' marketSell and marketBuy functions. - */ -export type SmartContractParams = ForwarderSmartContractParams | ExchangeSmartContractParams; - /** * Interface that varying SwapQuoteConsumers adhere to (exchange consumer, router consumer, forwarder consumer, coordinator consumer) * getCalldataOrThrow: Get CalldataInfo to swap for tokens with provided SwapQuote. Throws if invalid SwapQuote is provided. - * getSmartContractParamsOrThrow: Get SmartContractParamsInfo to swap for tokens with provided SwapQuote. Throws if invalid SwapQuote is provided. * executeSwapQuoteOrThrowAsync: Executes a web3 transaction to swap for tokens with provided SwapQuote. Throws if invalid SwapQuote is provided. */ -export interface SwapQuoteConsumerBase { +export interface SwapQuoteConsumerBase { getCalldataOrThrowAsync(quote: SwapQuote, opts: Partial): Promise; - getSmartContractParamsOrThrowAsync( - quote: SwapQuote, - opts: Partial, - ): Promise>; executeSwapQuoteOrThrowAsync(quote: SwapQuote, opts: Partial): Promise; } diff --git a/packages/asset-swapper/src/utils/affiliate_fee_utils.ts b/packages/asset-swapper/src/utils/affiliate_fee_utils.ts index 5ca29edab0..4ae46a6d33 100644 --- a/packages/asset-swapper/src/utils/affiliate_fee_utils.ts +++ b/packages/asset-swapper/src/utils/affiliate_fee_utils.ts @@ -1,6 +1,5 @@ import { BigNumber } from '@0x/utils'; -import { constants } from '../constants'; import { SwapQuoteInfo } from '../types'; import { assert } from './assert'; @@ -9,17 +8,22 @@ export const affiliateFeeUtils = { /** * Get the amount of eth to send for a forwarder contract call (includes takerAssetAmount, protocol fees, and specified affiliate fee amount) * @param swapQuoteInfo SwapQuoteInfo to generate total eth amount from - * @param feePercentage Percentage of additive fees to apply to totalTakerAssetAmount + protocol fee. (max 5%) + * @param feePercentage Percentage of additive fees to apply to totalTakerAssetAmount + protocol fee. */ getTotalEthAmountWithAffiliateFee(swapQuoteInfo: SwapQuoteInfo, feePercentage: number): BigNumber { - assert.assert( - feePercentage >= 0 && feePercentage <= constants.MAX_AFFILIATE_FEE_PERCENTAGE, - 'feePercentage must be between range 0-0.05 (inclusive)', - ); const ethAmount = swapQuoteInfo.protocolFeeInWeiAmount.plus(swapQuoteInfo.totalTakerAssetAmount); - // HACK(dekz): This is actually in WEI amount not ETH - const affiliateFeeAmount = ethAmount.multipliedBy(feePercentage).toFixed(0, BigNumber.ROUND_UP); - const ethAmountWithFees = ethAmount.plus(affiliateFeeAmount); + const ethAmountWithFees = ethAmount.plus(affiliateFeeUtils.getFeeAmount(swapQuoteInfo, feePercentage)); return ethAmountWithFees; }, + /** + * Get the affiliate fee owed to the forwarder fee recipient. + * @param swapQuoteInfo SwapQuoteInfo to generate total eth amount from + * @param feePercentage Percentage of additive fees to apply to totalTakerAssetAmount + protocol fee. + */ + getFeeAmount(swapQuoteInfo: SwapQuoteInfo, feePercentage: number): BigNumber { + assert.assert(feePercentage >= 0, 'feePercentage must be >= 0'); + const ethAmount = swapQuoteInfo.protocolFeeInWeiAmount.plus(swapQuoteInfo.totalTakerAssetAmount); + // HACK(dekz): This is actually in WEI amount not ETH + return ethAmount.times(feePercentage).integerValue(BigNumber.ROUND_UP); + }, }; diff --git a/packages/asset-swapper/src/utils/utils.ts b/packages/asset-swapper/src/utils/utils.ts index b8cb04e28b..52d59d36b3 100644 --- a/packages/asset-swapper/src/utils/utils.ts +++ b/packages/asset-swapper/src/utils/utils.ts @@ -2,8 +2,6 @@ import { assetDataUtils } from '@0x/order-utils'; import { AssetData, ERC20AssetData, ERC20BridgeAssetData, Order } from '@0x/types'; import { BigNumber, NULL_BYTES } from '@0x/utils'; import { Web3Wrapper } from '@0x/web3-wrapper'; -import { AbiDefinition, ContractAbi, MethodAbi } from 'ethereum-types'; -import * as _ from 'lodash'; import { constants } from '../constants'; @@ -14,19 +12,6 @@ export const utils = { percentage, ); }, - getMethodAbiFromContractAbi(abi: ContractAbi, name: string): MethodAbi | undefined { - return _.find( - abi, - (def: AbiDefinition): boolean => { - if (def.type === 'function') { - const methodDef = def as MethodAbi; - return methodDef.name === name; - } else { - return false; - } - }, - ) as MethodAbi | undefined; - }, isOrderTakerFeePayableWithMakerAsset(order: T): boolean { return !order.takerFee.isZero() && utils.isAssetDataEquivalent(order.takerFeeAssetData, order.makerAssetData); }, diff --git a/packages/asset-swapper/test/exchange_swap_quote_consumer_test.ts b/packages/asset-swapper/test/exchange_swap_quote_consumer_test.ts index dc8b55b53a..1143f5d477 100644 --- a/packages/asset-swapper/test/exchange_swap_quote_consumer_test.ts +++ b/packages/asset-swapper/test/exchange_swap_quote_consumer_test.ts @@ -11,14 +11,7 @@ import 'mocha'; import { SwapQuote } from '../src'; import { constants } from '../src/constants'; import { ExchangeSwapQuoteConsumer } from '../src/quote_consumers/exchange_swap_quote_consumer'; -import { - ExchangeMarketBuySmartContractParams, - ExchangeMarketSellSmartContractParams, - MarketBuySwapQuote, - MarketOperation, - MarketSellSwapQuote, - SignedOrderWithFillableAmounts, -} from '../src/types'; +import { MarketOperation, SignedOrderWithFillableAmounts } from '../src/types'; import { ProtocolFeeUtils } from '../src/utils/protocol_fee_utils'; import { chaiSetup } from './utils/chai_setup'; @@ -250,40 +243,6 @@ describe('ExchangeSwapQuoteConsumer', () => { }); }); - describe('#getSmartContractParamsOrThrow', () => { - describe('valid swap quote', async () => { - // TODO(david) Check for valid MethodAbi - it('provide correct and optimized smart contract params for a marketSell SwapQuote', async () => { - const { toAddress, params } = await swapQuoteConsumer.getSmartContractParamsOrThrowAsync( - marketSellSwapQuote, - {}, - ); - expect(toAddress).to.deep.equal(exchangeContract.address); - const { takerAssetFillAmount, signatures, type } = params as ExchangeMarketSellSmartContractParams; - expect(type).to.deep.equal(MarketOperation.Sell); - expect(takerAssetFillAmount).to.bignumber.equal( - (marketSellSwapQuote as MarketSellSwapQuote).takerAssetFillAmount, - ); - const orderSignatures = marketSellSwapQuote.orders.map(order => order.signature); - expect(signatures).to.deep.equal(orderSignatures); - }); - it('provide correct smart contract params for a marketBuy SwapQuote', async () => { - const { toAddress, params } = await swapQuoteConsumer.getSmartContractParamsOrThrowAsync( - marketBuySwapQuote, - {}, - ); - expect(toAddress).to.deep.equal(exchangeContract.address); - const { makerAssetFillAmount, signatures, type } = params as ExchangeMarketBuySmartContractParams; - expect(type).to.deep.equal(MarketOperation.Buy); - expect(makerAssetFillAmount).to.bignumber.equal( - (marketBuySwapQuote as MarketBuySwapQuote).makerAssetFillAmount, - ); - const orderSignatures = marketSellSwapQuote.orders.map(order => order.signature); - expect(signatures).to.deep.equal(orderSignatures); - }); - }); - }); - describe('#getCalldataOrThrow', () => { describe('valid swap quote', async () => { it('provide correct and optimized calldata options with default options for a marketSell SwapQuote (no affiliate fees)', async () => { diff --git a/packages/asset-swapper/test/forwarder_swap_quote_consumer_test.ts b/packages/asset-swapper/test/forwarder_swap_quote_consumer_test.ts index d69b7c4d7d..06d902cb50 100644 --- a/packages/asset-swapper/test/forwarder_swap_quote_consumer_test.ts +++ b/packages/asset-swapper/test/forwarder_swap_quote_consumer_test.ts @@ -11,13 +11,7 @@ import 'mocha'; import { SwapQuote } from '../src'; import { constants } from '../src/constants'; import { ForwarderSwapQuoteConsumer } from '../src/quote_consumers/forwarder_swap_quote_consumer'; -import { - ForwarderMarketBuySmartContractParams, - ForwarderMarketSellSmartContractParams, - MarketBuySwapQuote, - MarketOperation, - SignedOrderWithFillableAmounts, -} from '../src/types'; +import { MarketOperation, SignedOrderWithFillableAmounts } from '../src/types'; import { ProtocolFeeUtils } from '../src/utils/protocol_fee_utils'; import { chaiSetup } from './utils/chai_setup'; @@ -317,111 +311,6 @@ describe('ForwarderSwapQuoteConsumer', () => { }); }); - describe('#getSmartContractParamsOrThrow', () => { - describe('validation', () => { - it('should throw if swap quote provided is not a valid forwarder SwapQuote (taker asset is WETH)', async () => { - expect( - swapQuoteConsumer.getSmartContractParamsOrThrowAsync(invalidMarketBuySwapQuote, {}), - ).to.be.rejectedWith( - `Expected quote.orders[0] to have takerAssetData set as ${wethAssetData}, but is ${takerAssetData}`, - ); - }); - }); - - describe('valid swap quote', async () => { - it('provide correct and optimized smart contract params with default options for a marketSell SwapQuote (no affiliate fees)', async () => { - const { toAddress, params } = await swapQuoteConsumer.getSmartContractParamsOrThrowAsync( - marketSellSwapQuote, - {}, - ); - expect(toAddress).to.deep.equal(forwarderContract.address); - const { - feePercentage, - feeRecipient: feeRecipientFromParams, - signatures, - type, - } = params as ForwarderMarketSellSmartContractParams; - expect(type).to.deep.equal(MarketOperation.Sell); - expect(feeRecipientFromParams).to.deep.equal(constants.NULL_ADDRESS); - const orderSignatures = marketSellSwapQuote.orders.map(order => order.signature); - expect(signatures).to.deep.equal(orderSignatures); - expect(feePercentage).to.bignumber.equal(0); - }); - it('provide correct and optimized smart contract params with default options for a marketBuy SwapQuote (no affiliate fees)', async () => { - const { toAddress, params } = await swapQuoteConsumer.getSmartContractParamsOrThrowAsync( - marketBuySwapQuote, - {}, - ); - expect(toAddress).to.deep.equal(forwarderContract.address); - const { - makerAssetFillAmount, - feePercentage, - feeRecipient: feeRecipientFromParams, - signatures, - type, - } = params as ForwarderMarketBuySmartContractParams; - expect(type).to.deep.equal(MarketOperation.Buy); - expect(feeRecipientFromParams).to.deep.equal(constants.NULL_ADDRESS); - expect(makerAssetFillAmount).to.bignumber.equal( - (marketBuySwapQuote as MarketBuySwapQuote).makerAssetFillAmount, - ); - const orderSignatures = marketBuySwapQuote.orders.map(order => order.signature); - expect(signatures).to.deep.equal(orderSignatures); - expect(feePercentage).to.bignumber.equal(0); - }); - it('provide correct and optimized smart contract params with affiliate fees for a marketSell SwapQuote', async () => { - const { toAddress, params } = await swapQuoteConsumer.getSmartContractParamsOrThrowAsync( - marketSellSwapQuote, - { - extensionContractOpts: { - feePercentage: 0.05, - feeRecipient, - }, - }, - ); - expect(toAddress).to.deep.equal(forwarderContract.address); - const { - feePercentage, - feeRecipient: feeRecipientFromParams, - signatures, - type, - } = params as ForwarderMarketSellSmartContractParams; - expect(type).to.deep.equal(MarketOperation.Sell); - expect(feeRecipientFromParams).to.deep.equal(feeRecipient); - const orderSignatures = marketSellSwapQuote.orders.map(order => order.signature); - expect(signatures).to.deep.equal(orderSignatures); - expect(feePercentage).to.bignumber.equal(new BigNumber(0.05).multipliedBy(ONE_ETH_IN_WEI)); - }); - it('provide correct and optimized smart contract params with affiliate fees for a marketBuy SwapQuote', async () => { - const { toAddress, params } = await swapQuoteConsumer.getSmartContractParamsOrThrowAsync( - marketBuySwapQuote, - { - extensionContractOpts: { - feePercentage: 0.05, - feeRecipient, - }, - }, - ); - expect(toAddress).to.deep.equal(forwarderContract.address); - const { - makerAssetFillAmount, - feePercentage, - feeRecipient: feeRecipientFromParams, - signatures, - type, - } = params as ForwarderMarketBuySmartContractParams; - expect(type).to.deep.equal(MarketOperation.Buy); - expect(feeRecipientFromParams).to.deep.equal(feeRecipient); - expect(makerAssetFillAmount).to.bignumber.equal( - (marketBuySwapQuote as MarketBuySwapQuote).makerAssetFillAmount, - ); - const orderSignatures = marketBuySwapQuote.orders.map(order => order.signature); - expect(signatures).to.deep.equal(orderSignatures); - expect(feePercentage).to.bignumber.equal(new BigNumber(0.05).multipliedBy(ONE_ETH_IN_WEI)); - }); - }); - }); - describe('#getCalldataOrThrow', () => { describe('validation', () => { it('should throw if swap quote provided is not a valid forwarder SwapQuote (taker asset is WETH)', async () => { diff --git a/packages/contract-artifacts/CHANGELOG.json b/packages/contract-artifacts/CHANGELOG.json index 9a6a6aa30e..7f0a20fa60 100644 --- a/packages/contract-artifacts/CHANGELOG.json +++ b/packages/contract-artifacts/CHANGELOG.json @@ -1,4 +1,13 @@ [ + { + "version": "3.4.0", + "changes": [ + { + "note": "Update all artifacts.", + "pr": 2432 + } + ] + }, { "version": "3.3.0", "changes": [ diff --git a/packages/contract-artifacts/artifacts/Coordinator.json b/packages/contract-artifacts/artifacts/Coordinator.json index ac657fcd08..a1e2a87440 100644 --- a/packages/contract-artifacts/artifacts/Coordinator.json +++ b/packages/contract-artifacts/artifacts/Coordinator.json @@ -222,16 +222,16 @@ }, "evm": { "bytecode": { - "object": "0x60806040526002805460ff191690553480156200001b57600080fd5b5060405162002094380380620020948339810160408190526200003e9162000201565b81818181600080309050620000cb6040518060400160405280601781526020017f30782050726f746f636f6c20436f6f7264696e61746f720000000000000000008152506040518060400160405280600581526020017f332e302e300000000000000000000000000000000000000000000000000000008152508584620001aa60201b62001daf1760201c565b6000908155925050506001600160a01b03821615620000eb5781620000ed565b305b9050620001726040518060400160405280600b81526020017f30782050726f746f636f6c0000000000000000000000000000000000000000008152506040518060400160405280600581526020017f332e302e300000000000000000000000000000000000000000000000000000008152508584620001aa60201b62001daf1760201c565b6001555050600280546001600160a01b03909316620100000262010000600160b01b031990931692909217909155506200023b915050565b8351602094850120835193850193909320604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f815295860194909452928401929092526060830152608082015260a0902090565b6000806040838503121562000214578182fd5b82516001600160a01b03811681146200022b578283fd5b6020939093015192949293505050565b611e49806200024b6000396000f3fe6080604052600436106100b15760003560e01c8063da4fe07411610069578063ee55b9681161004e578063ee55b9681461018a578063fb6961cc146101b7578063fdd059a5146101cc576100b1565b8063da4fe07414610162578063e1c7157814610175576100b1565b806389fab5b71161009a57806389fab5b714610109578063b2562b7a1461012b578063c26cfecd14610140576100b1565b80630f7d8e39146100b357806352813679146100e9575b005b3480156100bf57600080fd5b506100d36100ce3660046116c2565b6101ec565b6040516100e09190611a15565b60405180910390f35b3480156100f557600080fd5b506100b1610104366004611889565b610455565b34801561011557600080fd5b5061011e610482565b6040516100e09190611c41565b34801561013757600080fd5b5061011e6104bb565b34801561014c57600080fd5b506101556104f4565b6040516100e09190611ba2565b6100b1610170366004611889565b6104fa565b34801561018157600080fd5b506101556105e8565b34801561019657600080fd5b506101aa6101a5366004611707565b61060c565b6040516100e09190611a36565b3480156101c357600080fd5b50610155610ac0565b3480156101d857600080fd5b506101556101e7366004611775565b610ac6565b80516000908061020a5761020a61020560008686610ad9565b610b7e565b60008360018551038151811061021c57fe5b016020015160f81c90506008811061023d5761023d61020560018787610ad9565b60008160ff16600881111561024e57fe5b9050600081600881111561025e57fe5b14156102785761027361020560028888610ad9565b61043c565b600181600881111561028657fe5b141561029b5761027361020560038888610ad9565b60028160088111156102a957fe5b141561038557826042146102c6576102c661020560008888610ad9565b6000856000815181106102d557fe5b016020015160f81c905060006102f287600163ffffffff610b8616565b9050600061030788602163ffffffff610b8616565b90506001898484846040516000815260200160405260405161032c9493929190611bcf565b6020604051602081039080840390855afa15801561034e573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00151975061044f9650505050505050565b600381600881111561039357fe5b141561043c57826042146103b0576103b061020560008888610ad9565b6000856000815181106103bf57fe5b016020015160f81c905060006103dc87600163ffffffff610b8616565b905060006103f188602163ffffffff610b8616565b905060018960405160200161040691906119e4565b604051602081830303815290604052805190602001208484846040516000815260200160405260405161032c9493929190611bcf565b61044b61020560018888610ad9565b5050505b92915050565b6060610464856080015161060c565b80519091501561047b5761047b8582868686610bb0565b5050505050565b6040518060400160405280601781526020017f30782050726f746f636f6c20436f6f7264696e61746f7200000000000000000081525081565b6040518060400160405280600581526020017f332e302e3000000000000000000000000000000000000000000000000000000081525081565b60015481565b61050684848484610455565b6002546040517f2280c9100000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff1690632280c9109034906105659088908790600401611c54565b6000604051808303818588803b15801561057e57600080fd5b505af1158015610592573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526105d99190810190611742565b506105e2610d5d565b50505050565b7fa6511c04ca44625d50986f8c36bedc09366207a17b96e347094053a9f850716881565b60606000610620838263ffffffff610d7316565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f9b44d5560000000000000000000000000000000000000000000000000000000014806106b357507fffffffff0000000000000000000000000000000000000000000000000000000081167fe14b58c400000000000000000000000000000000000000000000000000000000145b1561073c576106c06112e6565b83516106d690859060049063ffffffff610dbf16565b8060200190516106e991908101906117ff565b604080516001808252818301909252919250816020015b6107086112e6565b815260200190600190039081610700579050509250808360008151811061072b57fe5b602002602001018190525050610aba565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f9694a4020000000000000000000000000000000000000000000000000000000014806107cd57507fffffffff0000000000000000000000000000000000000000000000000000000081167f8ea8dfe400000000000000000000000000000000000000000000000000000000145b8061081957507fffffffff0000000000000000000000000000000000000000000000000000000081167fbeee2e1400000000000000000000000000000000000000000000000000000000145b8061086557507fffffffff0000000000000000000000000000000000000000000000000000000081167f78d29ac100000000000000000000000000000000000000000000000000000000145b806108b157507fffffffff0000000000000000000000000000000000000000000000000000000081167f8bc8efb300000000000000000000000000000000000000000000000000000000145b806108fd57507fffffffff0000000000000000000000000000000000000000000000000000000081167f369da09900000000000000000000000000000000000000000000000000000000145b8061094957507fffffffff0000000000000000000000000000000000000000000000000000000081167fa6c3bf3300000000000000000000000000000000000000000000000000000000145b1561097e57825161096490849060049063ffffffff610dbf16565b8060200190516109779190810190611636565b9150610aba565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f88ec79fb000000000000000000000000000000000000000000000000000000001480610a0f57507fffffffff0000000000000000000000000000000000000000000000000000000081167fb718e29200000000000000000000000000000000000000000000000000000000145b15610aba57610a1c6112e6565b610a246112e6565b8451610a3a90869060049063ffffffff610dbf16565b806020019051610a4d9190810190611832565b60408051600280825260608201909252929450909250816020015b610a706112e6565b815260200190600190039081610a685790505093508184600081518110610a9357fe5b60200260200101819052508084600181518110610aac57fe5b602002602001018190525050505b50919050565b60005481565b600061044f610ad483610e46565b610e99565b606063779c522360e01b848484604051602401610af893929190611c0f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290509392505050565b805160208201fd5b60008160200183511015610ba757610ba76102056005855185602001610ea7565b50016020015190565b3273ffffffffffffffffffffffffffffffffffffffff841614610bd957610bd961020584610ec6565b6000610be786600154610f65565b60408051600080825260208201909252845192935091905b818114610c9057610c0e6113ad565b60405180606001604052808973ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018881525090506000610c4c82610ac6565b90506000610c6d82898681518110610c6057fe5b60200260200101516101ec565b9050610c7f868263ffffffff610f7916565b95505060019092019150610bff9050565b50610ca1823263ffffffff610f7916565b875190925060005b818114610d5157600073ffffffffffffffffffffffffffffffffffffffff16898281518110610cd457fe5b60200260200101516060015173ffffffffffffffffffffffffffffffffffffffff161415610d0157610d49565b6000898281518110610d0f57fe5b60200260200101516040015190506000610d32828761101b90919063ffffffff16565b905080610d4657610d466102058884611053565b50505b600101610ca9565b50505050505050505050565b610d656110f5565b610d7157610d71611103565b565b60008160040183511015610d9457610d946102056003855185600401610ea7565b5001602001517fffffffff000000000000000000000000000000000000000000000000000000001690565b606081831115610dd857610dd861020560008585610ea7565b8351821115610df157610df16102056001848751610ea7565b8282036040519080825280601f01601f191660200182016040528015610e1e576020820181803883390190505b509050610e3f610e2d8261113d565b84610e378761113d565b018351611143565b9392505050565b604081810151825160209384015182519285019290922083517fa6511c04ca44625d50986f8c36bedc09366207a17b96e347094053a9f85071688152948501919091529183015260608201526080902090565b600061044f60005483611207565b6060632800659560e01b848484604051602401610af893929190611bed565b606063a458d7ff60e01b82604051602401610ee19190611a15565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050919050565b6000610e3f82610f7485611241565b611207565b815160405160609184906020808202808401820192910182851015610fa557610fa561020586856112c9565b82851115610fbf57610fb8858583611143565b8497508793505b60018201915060208101905080840192508294508188528460405286886001840381518110610fea57fe5b73ffffffffffffffffffffffffffffffffffffffff9092166020928302919091019091015250959695505050505050565b60006020835102602084018181018192505b8083101561044b5782518086141561104757600194508193505b5060208301925061102d565b606063d789b64060e01b8383604051602401611070929190611bab565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905092915050565b600254610100900460ff1690565b3031801561113a57604051339082156108fc029083906000818181858888f19350505050158015611138573d6000803e3d6000fd5b505b50565b60200190565b602081101561116d576001816020036101000a038019835116818551168082178652505050611202565b8282141561117a57611202565b828211156111b45760208103905080820181840181515b828510156111ac578451865260209586019590940193611191565b905250611202565b60208103905080820181840183515b818612156111fd57825182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe092830192909101906111c3565b855250505b505050565b6040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b608081810151825160208085015160408087015160609788015186519685019690962082517fec69816980a3a3ca4554410e60253953e9ff375ba4536a98adfa15cc71541508815294850195909552908301919091529481019490945273ffffffffffffffffffffffffffffffffffffffff9091169183019190915260a082015260c0902090565b6060635fc8372260e01b8383604051602401611070929190611cca565b604051806101c00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001606081525090565b6040805160608082018352600080835260208301529181019190915290565b803561044f81611d8d565b805161044f81611d8d565b600082601f8301126113f2578081fd5b813561140561140082611cff565b611cd8565b8181529150602080830190840160005b838110156114425761142d876020843589010161144c565b83526020928301929190910190600101611415565b5050505092915050565b600082601f83011261145c578081fd5b813561146a61140082611d1f565b915080825283602082850101111561148157600080fd5b8060208401602084013760009082016020015292915050565b600082601f8301126114aa578081fd5b81516114b861140082611d1f565b91508082528360208285010111156114cf57600080fd5b6114e0816020840160208601611d61565b5092915050565b60006101c08083850312156114fa578182fd5b61150381611cd8565b91505061151083836113d7565b815261151f83602084016113d7565b602082015261153183604084016113d7565b604082015261154383606084016113d7565b60608201526080820151608082015260a082015160a082015260c082015160c082015260e082015160e08201526101008083015181830152506101208083015181830152506101408083015167ffffffffffffffff808211156115a557600080fd5b6115b18683870161149a565b838501526101609250828501519150808211156115cd57600080fd5b6115d98683870161149a565b838501526101809250828501519150808211156115f557600080fd5b6116018683870161149a565b838501526101a092508285015191508082111561161d57600080fd5b5061162a8582860161149a565b82840152505092915050565b60006020808385031215611648578182fd5b825167ffffffffffffffff81111561165e578283fd5b80840185601f82011261166f578384fd5b8051915061167f61140083611cff565b82815283810190828501865b858110156116b4576116a28a8884518801016114e7565b8452928601929086019060010161168b565b509098975050505050505050565b600080604083850312156116d4578081fd5b82359150602083013567ffffffffffffffff8111156116f1578182fd5b6116fd8582860161144c565b9150509250929050565b600060208284031215611718578081fd5b813567ffffffffffffffff81111561172e578182fd5b61173a8482850161144c565b949350505050565b600060208284031215611753578081fd5b815167ffffffffffffffff811115611769578182fd5b61173a8482850161149a565b600060208284031215611786578081fd5b813567ffffffffffffffff8082111561179d578283fd5b818401606081870312156117af578384fd5b6117b96060611cd8565b925080356117c681611d8d565b8352602081810135908401526040810135828111156117e3578485fd5b6117ef8782840161144c565b6040850152509195945050505050565b600060208284031215611810578081fd5b815167ffffffffffffffff811115611826578182fd5b61173a848285016114e7565b60008060408385031215611844578182fd5b825167ffffffffffffffff8082111561185b578384fd5b611867868387016114e7565b9350602085015191508082111561187c578283fd5b506116fd858286016114e7565b6000806000806080858703121561189e578182fd5b843567ffffffffffffffff808211156118b5578384fd5b81870160a0818a0312156118c7578485fd5b6118d160a0611cd8565b92508035835260208101356020840152604081013560408401526118f889606083016113cc565b606084015260808101358281111561190e578586fd5b61191a8a82840161144c565b6080850152505081955061193188602089016113cc565b94506040870135915080821115611946578384fd5b6119528883890161144c565b93506060870135915080821115611967578283fd5b50611974878288016113e2565b91505092959194509250565b73ffffffffffffffffffffffffffffffffffffffff169052565b600081518084526119b2816020860160208601611d61565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015611b95577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845281516101c0611a9a878351611980565b87820151611aaa89890182611980565b506040820151611abd6040890182611980565b506060820151611ad06060890182611980565b506080820151608088015260a082015160a088015260c082015160c088015260e082015160e08801526101008083015181890152506101208083015181890152506101408083015182828a0152611b29838a018261199a565b915050610160915081830151888203838a0152611b46828261199a565b9250505061018080830151888303828a0152611b62838261199a565b9150506101a0915081830151888203838a0152611b7f828261199a565b9850505094870194505090850190600101611a5b565b5092979650505050505050565b90815260200190565b91825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b93845260ff9290921660208401526040830152606082015260800190565b6060810160088510611bfb57fe5b938152602081019290925260409091015290565b600060048510611c1b57fe5b84825283602083015260606040830152611c38606083018461199a565b95945050505050565b600060208252610e3f602083018461199a565b60006040825283516040830152602084015160608301526040840151608083015273ffffffffffffffffffffffffffffffffffffffff60608501511660a0830152608084015160a060c0840152611cae60e084018261199a565b8381036020850152611cc0818661199a565b9695505050505050565b918252602082015260400190565b60405181810167ffffffffffffffff81118282101715611cf757600080fd5b604052919050565b600067ffffffffffffffff821115611d15578081fd5b5060209081020190565b600067ffffffffffffffff821115611d35578081fd5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b83811015611d7c578181015183820152602001611d64565b838111156105e25750506000910152565b73ffffffffffffffffffffffffffffffffffffffff8116811461113a57600080fd5b8351602094850120835193850193909320604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f815295860194909452928401929092526060830152608082015260a090209056fea365627a7a72315820efc81773b7912bf9e2c93c985afa2b6feee69452023986811fc84107b08ecc776c6578706572696d656e74616cf564736f6c634300050d0040" + "object": "0x60806040526002805460ff191690553480156200001b57600080fd5b5060405162002051380380620020518339810160408190526200003e91620001bf565b81818181600080309050620000b36040518060400160405280601781526020017f30782050726f746f636f6c20436f6f7264696e61746f72000000000000000000815250604051806040016040528060058152602001640332e302e360dc1b81525085846200016860201b62001dae1760201c565b6000908155925050506001600160a01b03821615620000d35781620000d5565b305b9050620001306040518060400160405280600b81526020016a0c1e08141c9bdd1bd8dbdb60aa1b815250604051806040016040528060058152602001640332e302e360dc1b81525085846200016860201b62001dae1760201c565b6001555050600280546001600160a01b03909316620100000262010000600160b01b03199093169290921790915550620001f9915050565b8351602094850120835193850193909320604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f815295860194909452928401929092526060830152608082015260a0902090565b60008060408385031215620001d2578182fd5b82516001600160a01b0381168114620001e9578283fd5b6020939093015192949293505050565b611e4880620002096000396000f3fe6080604052600436106100b15760003560e01c8063da4fe07411610069578063ee55b9681161004e578063ee55b9681461018a578063fb6961cc146101b7578063fdd059a5146101cc576100b1565b8063da4fe07414610162578063e1c7157814610175576100b1565b806389fab5b71161009a57806389fab5b714610109578063b2562b7a1461012b578063c26cfecd14610140576100b1565b80630f7d8e39146100b357806352813679146100e9575b005b3480156100bf57600080fd5b506100d36100ce3660046116c1565b6101ec565b6040516100e09190611a14565b60405180910390f35b3480156100f557600080fd5b506100b1610104366004611888565b610455565b34801561011557600080fd5b5061011e610482565b6040516100e09190611c40565b34801561013757600080fd5b5061011e6104bb565b34801561014c57600080fd5b506101556104f4565b6040516100e09190611ba1565b6100b1610170366004611888565b6104fa565b34801561018157600080fd5b506101556105e8565b34801561019657600080fd5b506101aa6101a5366004611706565b61060c565b6040516100e09190611a35565b3480156101c357600080fd5b50610155610ac0565b3480156101d857600080fd5b506101556101e7366004611774565b610ac6565b80516000908061020a5761020a61020560008686610ad9565b610b7e565b60008360018551038151811061021c57fe5b016020015160f81c90506008811061023d5761023d61020560018787610ad9565b60008160ff16600881111561024e57fe5b9050600081600881111561025e57fe5b14156102785761027361020560028888610ad9565b61043c565b600181600881111561028657fe5b141561029b5761027361020560038888610ad9565b60028160088111156102a957fe5b141561038557826042146102c6576102c661020560008888610ad9565b6000856000815181106102d557fe5b016020015160f81c905060006102f287600163ffffffff610b8616565b9050600061030788602163ffffffff610b8616565b90506001898484846040516000815260200160405260405161032c9493929190611bce565b6020604051602081039080840390855afa15801561034e573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00151975061044f9650505050505050565b600381600881111561039357fe5b141561043c57826042146103b0576103b061020560008888610ad9565b6000856000815181106103bf57fe5b016020015160f81c905060006103dc87600163ffffffff610b8616565b905060006103f188602163ffffffff610b8616565b905060018960405160200161040691906119e3565b604051602081830303815290604052805190602001208484846040516000815260200160405260405161032c9493929190611bce565b61044b61020560018888610ad9565b5050505b92915050565b6060610464856080015161060c565b80519091501561047b5761047b8582868686610bb0565b5050505050565b6040518060400160405280601781526020017f30782050726f746f636f6c20436f6f7264696e61746f7200000000000000000081525081565b6040518060400160405280600581526020017f332e302e3000000000000000000000000000000000000000000000000000000081525081565b60015481565b61050684848484610455565b6002546040517f2280c9100000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff1690632280c9109034906105659088908790600401611c53565b6000604051808303818588803b15801561057e57600080fd5b505af1158015610592573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526105d99190810190611741565b506105e2610d5d565b50505050565b7fa6511c04ca44625d50986f8c36bedc09366207a17b96e347094053a9f850716881565b60606000610620838263ffffffff610d7316565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f9b44d5560000000000000000000000000000000000000000000000000000000014806106b357507fffffffff0000000000000000000000000000000000000000000000000000000081167fe14b58c400000000000000000000000000000000000000000000000000000000145b1561073c576106c06112e5565b83516106d690859060049063ffffffff610dbf16565b8060200190516106e991908101906117fe565b604080516001808252818301909252919250816020015b6107086112e5565b815260200190600190039081610700579050509250808360008151811061072b57fe5b602002602001018190525050610aba565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f9694a4020000000000000000000000000000000000000000000000000000000014806107cd57507fffffffff0000000000000000000000000000000000000000000000000000000081167f8ea8dfe400000000000000000000000000000000000000000000000000000000145b8061081957507fffffffff0000000000000000000000000000000000000000000000000000000081167fbeee2e1400000000000000000000000000000000000000000000000000000000145b8061086557507fffffffff0000000000000000000000000000000000000000000000000000000081167f78d29ac100000000000000000000000000000000000000000000000000000000145b806108b157507fffffffff0000000000000000000000000000000000000000000000000000000081167f8bc8efb300000000000000000000000000000000000000000000000000000000145b806108fd57507fffffffff0000000000000000000000000000000000000000000000000000000081167f369da09900000000000000000000000000000000000000000000000000000000145b8061094957507fffffffff0000000000000000000000000000000000000000000000000000000081167fa6c3bf3300000000000000000000000000000000000000000000000000000000145b1561097e57825161096490849060049063ffffffff610dbf16565b8060200190516109779190810190611635565b9150610aba565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f88ec79fb000000000000000000000000000000000000000000000000000000001480610a0f57507fffffffff0000000000000000000000000000000000000000000000000000000081167fb718e29200000000000000000000000000000000000000000000000000000000145b15610aba57610a1c6112e5565b610a246112e5565b8451610a3a90869060049063ffffffff610dbf16565b806020019051610a4d9190810190611831565b60408051600280825260608201909252929450909250816020015b610a706112e5565b815260200190600190039081610a685790505093508184600081518110610a9357fe5b60200260200101819052508084600181518110610aac57fe5b602002602001018190525050505b50919050565b60005481565b600061044f610ad483610e46565b610e99565b606063779c522360e01b848484604051602401610af893929190611c0e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290509392505050565b805160208201fd5b60008160200183511015610ba757610ba76102056005855185602001610ea7565b50016020015190565b3273ffffffffffffffffffffffffffffffffffffffff841614610bd957610bd961020584610ec6565b6000610be786600154610f65565b60408051600080825260208201909252845192935091905b818114610c9057610c0e6113ac565b60405180606001604052808973ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018881525090506000610c4c82610ac6565b90506000610c6d82898681518110610c6057fe5b60200260200101516101ec565b9050610c7f868263ffffffff610f7916565b95505060019092019150610bff9050565b50610ca1823263ffffffff610f7916565b875190925060005b818114610d5157600073ffffffffffffffffffffffffffffffffffffffff16898281518110610cd457fe5b60200260200101516060015173ffffffffffffffffffffffffffffffffffffffff161415610d0157610d49565b6000898281518110610d0f57fe5b60200260200101516040015190506000610d32828761101b90919063ffffffff16565b905080610d4657610d466102058884611053565b50505b600101610ca9565b50505050505050505050565b610d656110f5565b610d7157610d71611103565b565b60008160040183511015610d9457610d946102056003855185600401610ea7565b5001602001517fffffffff000000000000000000000000000000000000000000000000000000001690565b606081831115610dd857610dd861020560008585610ea7565b8351821115610df157610df16102056001848751610ea7565b8282036040519080825280601f01601f191660200182016040528015610e1e576020820181803883390190505b509050610e3f610e2d8261113c565b84610e378761113c565b018351611142565b9392505050565b604081810151825160209384015182519285019290922083517fa6511c04ca44625d50986f8c36bedc09366207a17b96e347094053a9f85071688152948501919091529183015260608201526080902090565b600061044f60005483611206565b6060632800659560e01b848484604051602401610af893929190611bec565b606063a458d7ff60e01b82604051602401610ee19190611a14565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050919050565b6000610e3f82610f7485611240565b611206565b815160405160609184906020808202808401820192910182851015610fa557610fa561020586856112c8565b82851115610fbf57610fb8858583611142565b8497508793505b60018201915060208101905080840192508294508188528460405286886001840381518110610fea57fe5b73ffffffffffffffffffffffffffffffffffffffff9092166020928302919091019091015250959695505050505050565b60006020835102602084018181018192505b8083101561044b5782518086141561104757600194508193505b5060208301925061102d565b606063d789b64060e01b8383604051602401611070929190611baa565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905092915050565b600254610100900460ff1690565b47801561113957604051339082156108fc029083906000818181858888f19350505050158015611137573d6000803e3d6000fd5b505b50565b60200190565b602081101561116c576001816020036101000a038019835116818551168082178652505050611201565b8282141561117957611201565b828211156111b35760208103905080820181840181515b828510156111ab578451865260209586019590940193611190565b905250611201565b60208103905080820181840183515b818612156111fc57825182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe092830192909101906111c2565b855250505b505050565b6040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b608081810151825160208085015160408087015160609788015186519685019690962082517fec69816980a3a3ca4554410e60253953e9ff375ba4536a98adfa15cc71541508815294850195909552908301919091529481019490945273ffffffffffffffffffffffffffffffffffffffff9091169183019190915260a082015260c0902090565b6060635fc8372260e01b8383604051602401611070929190611cc9565b604051806101c00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001606081525090565b6040805160608082018352600080835260208301529181019190915290565b803561044f81611d8c565b805161044f81611d8c565b600082601f8301126113f1578081fd5b81356114046113ff82611cfe565b611cd7565b8181529150602080830190840160005b838110156114415761142c876020843589010161144b565b83526020928301929190910190600101611414565b5050505092915050565b600082601f83011261145b578081fd5b81356114696113ff82611d1e565b915080825283602082850101111561148057600080fd5b8060208401602084013760009082016020015292915050565b600082601f8301126114a9578081fd5b81516114b76113ff82611d1e565b91508082528360208285010111156114ce57600080fd5b6114df816020840160208601611d60565b5092915050565b60006101c08083850312156114f9578182fd5b61150281611cd7565b91505061150f83836113d6565b815261151e83602084016113d6565b602082015261153083604084016113d6565b604082015261154283606084016113d6565b60608201526080820151608082015260a082015160a082015260c082015160c082015260e082015160e08201526101008083015181830152506101208083015181830152506101408083015167ffffffffffffffff808211156115a457600080fd5b6115b086838701611499565b838501526101609250828501519150808211156115cc57600080fd5b6115d886838701611499565b838501526101809250828501519150808211156115f457600080fd5b61160086838701611499565b838501526101a092508285015191508082111561161c57600080fd5b5061162985828601611499565b82840152505092915050565b60006020808385031215611647578182fd5b825167ffffffffffffffff81111561165d578283fd5b80840185601f82011261166e578384fd5b8051915061167e6113ff83611cfe565b82815283810190828501865b858110156116b3576116a18a8884518801016114e6565b8452928601929086019060010161168a565b509098975050505050505050565b600080604083850312156116d3578081fd5b82359150602083013567ffffffffffffffff8111156116f0578182fd5b6116fc8582860161144b565b9150509250929050565b600060208284031215611717578081fd5b813567ffffffffffffffff81111561172d578182fd5b6117398482850161144b565b949350505050565b600060208284031215611752578081fd5b815167ffffffffffffffff811115611768578182fd5b61173984828501611499565b600060208284031215611785578081fd5b813567ffffffffffffffff8082111561179c578283fd5b818401606081870312156117ae578384fd5b6117b86060611cd7565b925080356117c581611d8c565b8352602081810135908401526040810135828111156117e2578485fd5b6117ee8782840161144b565b6040850152509195945050505050565b60006020828403121561180f578081fd5b815167ffffffffffffffff811115611825578182fd5b611739848285016114e6565b60008060408385031215611843578182fd5b825167ffffffffffffffff8082111561185a578384fd5b611866868387016114e6565b9350602085015191508082111561187b578283fd5b506116fc858286016114e6565b6000806000806080858703121561189d578182fd5b843567ffffffffffffffff808211156118b4578384fd5b81870160a0818a0312156118c6578485fd5b6118d060a0611cd7565b92508035835260208101356020840152604081013560408401526118f789606083016113cb565b606084015260808101358281111561190d578586fd5b6119198a82840161144b565b6080850152505081955061193088602089016113cb565b94506040870135915080821115611945578384fd5b6119518883890161144b565b93506060870135915080821115611966578283fd5b50611973878288016113e1565b91505092959194509250565b73ffffffffffffffffffffffffffffffffffffffff169052565b600081518084526119b1816020860160208601611d60565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015611b94577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845281516101c0611a9987835161197f565b87820151611aa98989018261197f565b506040820151611abc604089018261197f565b506060820151611acf606089018261197f565b506080820151608088015260a082015160a088015260c082015160c088015260e082015160e08801526101008083015181890152506101208083015181890152506101408083015182828a0152611b28838a0182611999565b915050610160915081830151888203838a0152611b458282611999565b9250505061018080830151888303828a0152611b618382611999565b9150506101a0915081830151888203838a0152611b7e8282611999565b9850505094870194505090850190600101611a5a565b5092979650505050505050565b90815260200190565b91825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b93845260ff9290921660208401526040830152606082015260800190565b6060810160088510611bfa57fe5b938152602081019290925260409091015290565b600060048510611c1a57fe5b84825283602083015260606040830152611c376060830184611999565b95945050505050565b600060208252610e3f6020830184611999565b60006040825283516040830152602084015160608301526040840151608083015273ffffffffffffffffffffffffffffffffffffffff60608501511660a0830152608084015160a060c0840152611cad60e0840182611999565b8381036020850152611cbf8186611999565b9695505050505050565b918252602082015260400190565b60405181810167ffffffffffffffff81118282101715611cf657600080fd5b604052919050565b600067ffffffffffffffff821115611d14578081fd5b5060209081020190565b600067ffffffffffffffff821115611d34578081fd5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b83811015611d7b578181015183820152602001611d63565b838111156105e25750506000910152565b73ffffffffffffffffffffffffffffffffffffffff8116811461113957600080fd5b8351602094850120835193850193909320604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f815295860194909452928401929092526060830152608082015260a090209056fea365627a7a72315820926abd0f9ec1c8b67d93fbc87771f0336fe827fb0a1927bf1606417cd86e97966c6578706572696d656e74616cf564736f6c63430005100040" }, "deployedBytecode": { - "object": "0x6080604052600436106100b15760003560e01c8063da4fe07411610069578063ee55b9681161004e578063ee55b9681461018a578063fb6961cc146101b7578063fdd059a5146101cc576100b1565b8063da4fe07414610162578063e1c7157814610175576100b1565b806389fab5b71161009a57806389fab5b714610109578063b2562b7a1461012b578063c26cfecd14610140576100b1565b80630f7d8e39146100b357806352813679146100e9575b005b3480156100bf57600080fd5b506100d36100ce3660046116c2565b6101ec565b6040516100e09190611a15565b60405180910390f35b3480156100f557600080fd5b506100b1610104366004611889565b610455565b34801561011557600080fd5b5061011e610482565b6040516100e09190611c41565b34801561013757600080fd5b5061011e6104bb565b34801561014c57600080fd5b506101556104f4565b6040516100e09190611ba2565b6100b1610170366004611889565b6104fa565b34801561018157600080fd5b506101556105e8565b34801561019657600080fd5b506101aa6101a5366004611707565b61060c565b6040516100e09190611a36565b3480156101c357600080fd5b50610155610ac0565b3480156101d857600080fd5b506101556101e7366004611775565b610ac6565b80516000908061020a5761020a61020560008686610ad9565b610b7e565b60008360018551038151811061021c57fe5b016020015160f81c90506008811061023d5761023d61020560018787610ad9565b60008160ff16600881111561024e57fe5b9050600081600881111561025e57fe5b14156102785761027361020560028888610ad9565b61043c565b600181600881111561028657fe5b141561029b5761027361020560038888610ad9565b60028160088111156102a957fe5b141561038557826042146102c6576102c661020560008888610ad9565b6000856000815181106102d557fe5b016020015160f81c905060006102f287600163ffffffff610b8616565b9050600061030788602163ffffffff610b8616565b90506001898484846040516000815260200160405260405161032c9493929190611bcf565b6020604051602081039080840390855afa15801561034e573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00151975061044f9650505050505050565b600381600881111561039357fe5b141561043c57826042146103b0576103b061020560008888610ad9565b6000856000815181106103bf57fe5b016020015160f81c905060006103dc87600163ffffffff610b8616565b905060006103f188602163ffffffff610b8616565b905060018960405160200161040691906119e4565b604051602081830303815290604052805190602001208484846040516000815260200160405260405161032c9493929190611bcf565b61044b61020560018888610ad9565b5050505b92915050565b6060610464856080015161060c565b80519091501561047b5761047b8582868686610bb0565b5050505050565b6040518060400160405280601781526020017f30782050726f746f636f6c20436f6f7264696e61746f7200000000000000000081525081565b6040518060400160405280600581526020017f332e302e3000000000000000000000000000000000000000000000000000000081525081565b60015481565b61050684848484610455565b6002546040517f2280c9100000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff1690632280c9109034906105659088908790600401611c54565b6000604051808303818588803b15801561057e57600080fd5b505af1158015610592573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526105d99190810190611742565b506105e2610d5d565b50505050565b7fa6511c04ca44625d50986f8c36bedc09366207a17b96e347094053a9f850716881565b60606000610620838263ffffffff610d7316565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f9b44d5560000000000000000000000000000000000000000000000000000000014806106b357507fffffffff0000000000000000000000000000000000000000000000000000000081167fe14b58c400000000000000000000000000000000000000000000000000000000145b1561073c576106c06112e6565b83516106d690859060049063ffffffff610dbf16565b8060200190516106e991908101906117ff565b604080516001808252818301909252919250816020015b6107086112e6565b815260200190600190039081610700579050509250808360008151811061072b57fe5b602002602001018190525050610aba565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f9694a4020000000000000000000000000000000000000000000000000000000014806107cd57507fffffffff0000000000000000000000000000000000000000000000000000000081167f8ea8dfe400000000000000000000000000000000000000000000000000000000145b8061081957507fffffffff0000000000000000000000000000000000000000000000000000000081167fbeee2e1400000000000000000000000000000000000000000000000000000000145b8061086557507fffffffff0000000000000000000000000000000000000000000000000000000081167f78d29ac100000000000000000000000000000000000000000000000000000000145b806108b157507fffffffff0000000000000000000000000000000000000000000000000000000081167f8bc8efb300000000000000000000000000000000000000000000000000000000145b806108fd57507fffffffff0000000000000000000000000000000000000000000000000000000081167f369da09900000000000000000000000000000000000000000000000000000000145b8061094957507fffffffff0000000000000000000000000000000000000000000000000000000081167fa6c3bf3300000000000000000000000000000000000000000000000000000000145b1561097e57825161096490849060049063ffffffff610dbf16565b8060200190516109779190810190611636565b9150610aba565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f88ec79fb000000000000000000000000000000000000000000000000000000001480610a0f57507fffffffff0000000000000000000000000000000000000000000000000000000081167fb718e29200000000000000000000000000000000000000000000000000000000145b15610aba57610a1c6112e6565b610a246112e6565b8451610a3a90869060049063ffffffff610dbf16565b806020019051610a4d9190810190611832565b60408051600280825260608201909252929450909250816020015b610a706112e6565b815260200190600190039081610a685790505093508184600081518110610a9357fe5b60200260200101819052508084600181518110610aac57fe5b602002602001018190525050505b50919050565b60005481565b600061044f610ad483610e46565b610e99565b606063779c522360e01b848484604051602401610af893929190611c0f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290509392505050565b805160208201fd5b60008160200183511015610ba757610ba76102056005855185602001610ea7565b50016020015190565b3273ffffffffffffffffffffffffffffffffffffffff841614610bd957610bd961020584610ec6565b6000610be786600154610f65565b60408051600080825260208201909252845192935091905b818114610c9057610c0e6113ad565b60405180606001604052808973ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018881525090506000610c4c82610ac6565b90506000610c6d82898681518110610c6057fe5b60200260200101516101ec565b9050610c7f868263ffffffff610f7916565b95505060019092019150610bff9050565b50610ca1823263ffffffff610f7916565b875190925060005b818114610d5157600073ffffffffffffffffffffffffffffffffffffffff16898281518110610cd457fe5b60200260200101516060015173ffffffffffffffffffffffffffffffffffffffff161415610d0157610d49565b6000898281518110610d0f57fe5b60200260200101516040015190506000610d32828761101b90919063ffffffff16565b905080610d4657610d466102058884611053565b50505b600101610ca9565b50505050505050505050565b610d656110f5565b610d7157610d71611103565b565b60008160040183511015610d9457610d946102056003855185600401610ea7565b5001602001517fffffffff000000000000000000000000000000000000000000000000000000001690565b606081831115610dd857610dd861020560008585610ea7565b8351821115610df157610df16102056001848751610ea7565b8282036040519080825280601f01601f191660200182016040528015610e1e576020820181803883390190505b509050610e3f610e2d8261113d565b84610e378761113d565b018351611143565b9392505050565b604081810151825160209384015182519285019290922083517fa6511c04ca44625d50986f8c36bedc09366207a17b96e347094053a9f85071688152948501919091529183015260608201526080902090565b600061044f60005483611207565b6060632800659560e01b848484604051602401610af893929190611bed565b606063a458d7ff60e01b82604051602401610ee19190611a15565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050919050565b6000610e3f82610f7485611241565b611207565b815160405160609184906020808202808401820192910182851015610fa557610fa561020586856112c9565b82851115610fbf57610fb8858583611143565b8497508793505b60018201915060208101905080840192508294508188528460405286886001840381518110610fea57fe5b73ffffffffffffffffffffffffffffffffffffffff9092166020928302919091019091015250959695505050505050565b60006020835102602084018181018192505b8083101561044b5782518086141561104757600194508193505b5060208301925061102d565b606063d789b64060e01b8383604051602401611070929190611bab565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905092915050565b600254610100900460ff1690565b3031801561113a57604051339082156108fc029083906000818181858888f19350505050158015611138573d6000803e3d6000fd5b505b50565b60200190565b602081101561116d576001816020036101000a038019835116818551168082178652505050611202565b8282141561117a57611202565b828211156111b45760208103905080820181840181515b828510156111ac578451865260209586019590940193611191565b905250611202565b60208103905080820181840183515b818612156111fd57825182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe092830192909101906111c3565b855250505b505050565b6040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b608081810151825160208085015160408087015160609788015186519685019690962082517fec69816980a3a3ca4554410e60253953e9ff375ba4536a98adfa15cc71541508815294850195909552908301919091529481019490945273ffffffffffffffffffffffffffffffffffffffff9091169183019190915260a082015260c0902090565b6060635fc8372260e01b8383604051602401611070929190611cca565b604051806101c00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001606081525090565b6040805160608082018352600080835260208301529181019190915290565b803561044f81611d8d565b805161044f81611d8d565b600082601f8301126113f2578081fd5b813561140561140082611cff565b611cd8565b8181529150602080830190840160005b838110156114425761142d876020843589010161144c565b83526020928301929190910190600101611415565b5050505092915050565b600082601f83011261145c578081fd5b813561146a61140082611d1f565b915080825283602082850101111561148157600080fd5b8060208401602084013760009082016020015292915050565b600082601f8301126114aa578081fd5b81516114b861140082611d1f565b91508082528360208285010111156114cf57600080fd5b6114e0816020840160208601611d61565b5092915050565b60006101c08083850312156114fa578182fd5b61150381611cd8565b91505061151083836113d7565b815261151f83602084016113d7565b602082015261153183604084016113d7565b604082015261154383606084016113d7565b60608201526080820151608082015260a082015160a082015260c082015160c082015260e082015160e08201526101008083015181830152506101208083015181830152506101408083015167ffffffffffffffff808211156115a557600080fd5b6115b18683870161149a565b838501526101609250828501519150808211156115cd57600080fd5b6115d98683870161149a565b838501526101809250828501519150808211156115f557600080fd5b6116018683870161149a565b838501526101a092508285015191508082111561161d57600080fd5b5061162a8582860161149a565b82840152505092915050565b60006020808385031215611648578182fd5b825167ffffffffffffffff81111561165e578283fd5b80840185601f82011261166f578384fd5b8051915061167f61140083611cff565b82815283810190828501865b858110156116b4576116a28a8884518801016114e7565b8452928601929086019060010161168b565b509098975050505050505050565b600080604083850312156116d4578081fd5b82359150602083013567ffffffffffffffff8111156116f1578182fd5b6116fd8582860161144c565b9150509250929050565b600060208284031215611718578081fd5b813567ffffffffffffffff81111561172e578182fd5b61173a8482850161144c565b949350505050565b600060208284031215611753578081fd5b815167ffffffffffffffff811115611769578182fd5b61173a8482850161149a565b600060208284031215611786578081fd5b813567ffffffffffffffff8082111561179d578283fd5b818401606081870312156117af578384fd5b6117b96060611cd8565b925080356117c681611d8d565b8352602081810135908401526040810135828111156117e3578485fd5b6117ef8782840161144c565b6040850152509195945050505050565b600060208284031215611810578081fd5b815167ffffffffffffffff811115611826578182fd5b61173a848285016114e7565b60008060408385031215611844578182fd5b825167ffffffffffffffff8082111561185b578384fd5b611867868387016114e7565b9350602085015191508082111561187c578283fd5b506116fd858286016114e7565b6000806000806080858703121561189e578182fd5b843567ffffffffffffffff808211156118b5578384fd5b81870160a0818a0312156118c7578485fd5b6118d160a0611cd8565b92508035835260208101356020840152604081013560408401526118f889606083016113cc565b606084015260808101358281111561190e578586fd5b61191a8a82840161144c565b6080850152505081955061193188602089016113cc565b94506040870135915080821115611946578384fd5b6119528883890161144c565b93506060870135915080821115611967578283fd5b50611974878288016113e2565b91505092959194509250565b73ffffffffffffffffffffffffffffffffffffffff169052565b600081518084526119b2816020860160208601611d61565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015611b95577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845281516101c0611a9a878351611980565b87820151611aaa89890182611980565b506040820151611abd6040890182611980565b506060820151611ad06060890182611980565b506080820151608088015260a082015160a088015260c082015160c088015260e082015160e08801526101008083015181890152506101208083015181890152506101408083015182828a0152611b29838a018261199a565b915050610160915081830151888203838a0152611b46828261199a565b9250505061018080830151888303828a0152611b62838261199a565b9150506101a0915081830151888203838a0152611b7f828261199a565b9850505094870194505090850190600101611a5b565b5092979650505050505050565b90815260200190565b91825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b93845260ff9290921660208401526040830152606082015260800190565b6060810160088510611bfb57fe5b938152602081019290925260409091015290565b600060048510611c1b57fe5b84825283602083015260606040830152611c38606083018461199a565b95945050505050565b600060208252610e3f602083018461199a565b60006040825283516040830152602084015160608301526040840151608083015273ffffffffffffffffffffffffffffffffffffffff60608501511660a0830152608084015160a060c0840152611cae60e084018261199a565b8381036020850152611cc0818661199a565b9695505050505050565b918252602082015260400190565b60405181810167ffffffffffffffff81118282101715611cf757600080fd5b604052919050565b600067ffffffffffffffff821115611d15578081fd5b5060209081020190565b600067ffffffffffffffff821115611d35578081fd5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b83811015611d7c578181015183820152602001611d64565b838111156105e25750506000910152565b73ffffffffffffffffffffffffffffffffffffffff8116811461113a57600080fd5b8351602094850120835193850193909320604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f815295860194909452928401929092526060830152608082015260a090209056fea365627a7a72315820efc81773b7912bf9e2c93c985afa2b6feee69452023986811fc84107b08ecc776c6578706572696d656e74616cf564736f6c634300050d0040" + "object": "0x6080604052600436106100b15760003560e01c8063da4fe07411610069578063ee55b9681161004e578063ee55b9681461018a578063fb6961cc146101b7578063fdd059a5146101cc576100b1565b8063da4fe07414610162578063e1c7157814610175576100b1565b806389fab5b71161009a57806389fab5b714610109578063b2562b7a1461012b578063c26cfecd14610140576100b1565b80630f7d8e39146100b357806352813679146100e9575b005b3480156100bf57600080fd5b506100d36100ce3660046116c1565b6101ec565b6040516100e09190611a14565b60405180910390f35b3480156100f557600080fd5b506100b1610104366004611888565b610455565b34801561011557600080fd5b5061011e610482565b6040516100e09190611c40565b34801561013757600080fd5b5061011e6104bb565b34801561014c57600080fd5b506101556104f4565b6040516100e09190611ba1565b6100b1610170366004611888565b6104fa565b34801561018157600080fd5b506101556105e8565b34801561019657600080fd5b506101aa6101a5366004611706565b61060c565b6040516100e09190611a35565b3480156101c357600080fd5b50610155610ac0565b3480156101d857600080fd5b506101556101e7366004611774565b610ac6565b80516000908061020a5761020a61020560008686610ad9565b610b7e565b60008360018551038151811061021c57fe5b016020015160f81c90506008811061023d5761023d61020560018787610ad9565b60008160ff16600881111561024e57fe5b9050600081600881111561025e57fe5b14156102785761027361020560028888610ad9565b61043c565b600181600881111561028657fe5b141561029b5761027361020560038888610ad9565b60028160088111156102a957fe5b141561038557826042146102c6576102c661020560008888610ad9565b6000856000815181106102d557fe5b016020015160f81c905060006102f287600163ffffffff610b8616565b9050600061030788602163ffffffff610b8616565b90506001898484846040516000815260200160405260405161032c9493929190611bce565b6020604051602081039080840390855afa15801561034e573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00151975061044f9650505050505050565b600381600881111561039357fe5b141561043c57826042146103b0576103b061020560008888610ad9565b6000856000815181106103bf57fe5b016020015160f81c905060006103dc87600163ffffffff610b8616565b905060006103f188602163ffffffff610b8616565b905060018960405160200161040691906119e3565b604051602081830303815290604052805190602001208484846040516000815260200160405260405161032c9493929190611bce565b61044b61020560018888610ad9565b5050505b92915050565b6060610464856080015161060c565b80519091501561047b5761047b8582868686610bb0565b5050505050565b6040518060400160405280601781526020017f30782050726f746f636f6c20436f6f7264696e61746f7200000000000000000081525081565b6040518060400160405280600581526020017f332e302e3000000000000000000000000000000000000000000000000000000081525081565b60015481565b61050684848484610455565b6002546040517f2280c9100000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff1690632280c9109034906105659088908790600401611c53565b6000604051808303818588803b15801561057e57600080fd5b505af1158015610592573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526105d99190810190611741565b506105e2610d5d565b50505050565b7fa6511c04ca44625d50986f8c36bedc09366207a17b96e347094053a9f850716881565b60606000610620838263ffffffff610d7316565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f9b44d5560000000000000000000000000000000000000000000000000000000014806106b357507fffffffff0000000000000000000000000000000000000000000000000000000081167fe14b58c400000000000000000000000000000000000000000000000000000000145b1561073c576106c06112e5565b83516106d690859060049063ffffffff610dbf16565b8060200190516106e991908101906117fe565b604080516001808252818301909252919250816020015b6107086112e5565b815260200190600190039081610700579050509250808360008151811061072b57fe5b602002602001018190525050610aba565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f9694a4020000000000000000000000000000000000000000000000000000000014806107cd57507fffffffff0000000000000000000000000000000000000000000000000000000081167f8ea8dfe400000000000000000000000000000000000000000000000000000000145b8061081957507fffffffff0000000000000000000000000000000000000000000000000000000081167fbeee2e1400000000000000000000000000000000000000000000000000000000145b8061086557507fffffffff0000000000000000000000000000000000000000000000000000000081167f78d29ac100000000000000000000000000000000000000000000000000000000145b806108b157507fffffffff0000000000000000000000000000000000000000000000000000000081167f8bc8efb300000000000000000000000000000000000000000000000000000000145b806108fd57507fffffffff0000000000000000000000000000000000000000000000000000000081167f369da09900000000000000000000000000000000000000000000000000000000145b8061094957507fffffffff0000000000000000000000000000000000000000000000000000000081167fa6c3bf3300000000000000000000000000000000000000000000000000000000145b1561097e57825161096490849060049063ffffffff610dbf16565b8060200190516109779190810190611635565b9150610aba565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f88ec79fb000000000000000000000000000000000000000000000000000000001480610a0f57507fffffffff0000000000000000000000000000000000000000000000000000000081167fb718e29200000000000000000000000000000000000000000000000000000000145b15610aba57610a1c6112e5565b610a246112e5565b8451610a3a90869060049063ffffffff610dbf16565b806020019051610a4d9190810190611831565b60408051600280825260608201909252929450909250816020015b610a706112e5565b815260200190600190039081610a685790505093508184600081518110610a9357fe5b60200260200101819052508084600181518110610aac57fe5b602002602001018190525050505b50919050565b60005481565b600061044f610ad483610e46565b610e99565b606063779c522360e01b848484604051602401610af893929190611c0e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290509392505050565b805160208201fd5b60008160200183511015610ba757610ba76102056005855185602001610ea7565b50016020015190565b3273ffffffffffffffffffffffffffffffffffffffff841614610bd957610bd961020584610ec6565b6000610be786600154610f65565b60408051600080825260208201909252845192935091905b818114610c9057610c0e6113ac565b60405180606001604052808973ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018881525090506000610c4c82610ac6565b90506000610c6d82898681518110610c6057fe5b60200260200101516101ec565b9050610c7f868263ffffffff610f7916565b95505060019092019150610bff9050565b50610ca1823263ffffffff610f7916565b875190925060005b818114610d5157600073ffffffffffffffffffffffffffffffffffffffff16898281518110610cd457fe5b60200260200101516060015173ffffffffffffffffffffffffffffffffffffffff161415610d0157610d49565b6000898281518110610d0f57fe5b60200260200101516040015190506000610d32828761101b90919063ffffffff16565b905080610d4657610d466102058884611053565b50505b600101610ca9565b50505050505050505050565b610d656110f5565b610d7157610d71611103565b565b60008160040183511015610d9457610d946102056003855185600401610ea7565b5001602001517fffffffff000000000000000000000000000000000000000000000000000000001690565b606081831115610dd857610dd861020560008585610ea7565b8351821115610df157610df16102056001848751610ea7565b8282036040519080825280601f01601f191660200182016040528015610e1e576020820181803883390190505b509050610e3f610e2d8261113c565b84610e378761113c565b018351611142565b9392505050565b604081810151825160209384015182519285019290922083517fa6511c04ca44625d50986f8c36bedc09366207a17b96e347094053a9f85071688152948501919091529183015260608201526080902090565b600061044f60005483611206565b6060632800659560e01b848484604051602401610af893929190611bec565b606063a458d7ff60e01b82604051602401610ee19190611a14565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050919050565b6000610e3f82610f7485611240565b611206565b815160405160609184906020808202808401820192910182851015610fa557610fa561020586856112c8565b82851115610fbf57610fb8858583611142565b8497508793505b60018201915060208101905080840192508294508188528460405286886001840381518110610fea57fe5b73ffffffffffffffffffffffffffffffffffffffff9092166020928302919091019091015250959695505050505050565b60006020835102602084018181018192505b8083101561044b5782518086141561104757600194508193505b5060208301925061102d565b606063d789b64060e01b8383604051602401611070929190611baa565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905092915050565b600254610100900460ff1690565b47801561113957604051339082156108fc029083906000818181858888f19350505050158015611137573d6000803e3d6000fd5b505b50565b60200190565b602081101561116c576001816020036101000a038019835116818551168082178652505050611201565b8282141561117957611201565b828211156111b35760208103905080820181840181515b828510156111ab578451865260209586019590940193611190565b905250611201565b60208103905080820181840183515b818612156111fc57825182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe092830192909101906111c2565b855250505b505050565b6040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b608081810151825160208085015160408087015160609788015186519685019690962082517fec69816980a3a3ca4554410e60253953e9ff375ba4536a98adfa15cc71541508815294850195909552908301919091529481019490945273ffffffffffffffffffffffffffffffffffffffff9091169183019190915260a082015260c0902090565b6060635fc8372260e01b8383604051602401611070929190611cc9565b604051806101c00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001606081525090565b6040805160608082018352600080835260208301529181019190915290565b803561044f81611d8c565b805161044f81611d8c565b600082601f8301126113f1578081fd5b81356114046113ff82611cfe565b611cd7565b8181529150602080830190840160005b838110156114415761142c876020843589010161144b565b83526020928301929190910190600101611414565b5050505092915050565b600082601f83011261145b578081fd5b81356114696113ff82611d1e565b915080825283602082850101111561148057600080fd5b8060208401602084013760009082016020015292915050565b600082601f8301126114a9578081fd5b81516114b76113ff82611d1e565b91508082528360208285010111156114ce57600080fd5b6114df816020840160208601611d60565b5092915050565b60006101c08083850312156114f9578182fd5b61150281611cd7565b91505061150f83836113d6565b815261151e83602084016113d6565b602082015261153083604084016113d6565b604082015261154283606084016113d6565b60608201526080820151608082015260a082015160a082015260c082015160c082015260e082015160e08201526101008083015181830152506101208083015181830152506101408083015167ffffffffffffffff808211156115a457600080fd5b6115b086838701611499565b838501526101609250828501519150808211156115cc57600080fd5b6115d886838701611499565b838501526101809250828501519150808211156115f457600080fd5b61160086838701611499565b838501526101a092508285015191508082111561161c57600080fd5b5061162985828601611499565b82840152505092915050565b60006020808385031215611647578182fd5b825167ffffffffffffffff81111561165d578283fd5b80840185601f82011261166e578384fd5b8051915061167e6113ff83611cfe565b82815283810190828501865b858110156116b3576116a18a8884518801016114e6565b8452928601929086019060010161168a565b509098975050505050505050565b600080604083850312156116d3578081fd5b82359150602083013567ffffffffffffffff8111156116f0578182fd5b6116fc8582860161144b565b9150509250929050565b600060208284031215611717578081fd5b813567ffffffffffffffff81111561172d578182fd5b6117398482850161144b565b949350505050565b600060208284031215611752578081fd5b815167ffffffffffffffff811115611768578182fd5b61173984828501611499565b600060208284031215611785578081fd5b813567ffffffffffffffff8082111561179c578283fd5b818401606081870312156117ae578384fd5b6117b86060611cd7565b925080356117c581611d8c565b8352602081810135908401526040810135828111156117e2578485fd5b6117ee8782840161144b565b6040850152509195945050505050565b60006020828403121561180f578081fd5b815167ffffffffffffffff811115611825578182fd5b611739848285016114e6565b60008060408385031215611843578182fd5b825167ffffffffffffffff8082111561185a578384fd5b611866868387016114e6565b9350602085015191508082111561187b578283fd5b506116fc858286016114e6565b6000806000806080858703121561189d578182fd5b843567ffffffffffffffff808211156118b4578384fd5b81870160a0818a0312156118c6578485fd5b6118d060a0611cd7565b92508035835260208101356020840152604081013560408401526118f789606083016113cb565b606084015260808101358281111561190d578586fd5b6119198a82840161144b565b6080850152505081955061193088602089016113cb565b94506040870135915080821115611945578384fd5b6119518883890161144b565b93506060870135915080821115611966578283fd5b50611973878288016113e1565b91505092959194509250565b73ffffffffffffffffffffffffffffffffffffffff169052565b600081518084526119b1816020860160208601611d60565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015611b94577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845281516101c0611a9987835161197f565b87820151611aa98989018261197f565b506040820151611abc604089018261197f565b506060820151611acf606089018261197f565b506080820151608088015260a082015160a088015260c082015160c088015260e082015160e08801526101008083015181890152506101208083015181890152506101408083015182828a0152611b28838a0182611999565b915050610160915081830151888203838a0152611b458282611999565b9250505061018080830151888303828a0152611b618382611999565b9150506101a0915081830151888203838a0152611b7e8282611999565b9850505094870194505090850190600101611a5a565b5092979650505050505050565b90815260200190565b91825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b93845260ff9290921660208401526040830152606082015260800190565b6060810160088510611bfa57fe5b938152602081019290925260409091015290565b600060048510611c1a57fe5b84825283602083015260606040830152611c376060830184611999565b95945050505050565b600060208252610e3f6020830184611999565b60006040825283516040830152602084015160608301526040840151608083015273ffffffffffffffffffffffffffffffffffffffff60608501511660a0830152608084015160a060c0840152611cad60e0840182611999565b8381036020850152611cbf8186611999565b9695505050505050565b918252602082015260400190565b60405181810167ffffffffffffffff81118282101715611cf657600080fd5b604052919050565b600067ffffffffffffffff821115611d14578081fd5b5060209081020190565b600067ffffffffffffffff821115611d34578081fd5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b83811015611d7b578181015183820152602001611d63565b838111156105e25750506000910152565b73ffffffffffffffffffffffffffffffffffffffff8116811461113957600080fd5b8351602094850120835193850193909320604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f815295860194909452928401929092526060830152608082015260a090209056fea365627a7a72315820926abd0f9ec1c8b67d93fbc87771f0336fe827fb0a1927bf1606417cd86e97966c6578706572696d656e74616cf564736f6c63430005100040" } } }, "compiler": { "name": "solc", - "version": "soljson-v0.5.13+commit.5b0b510c.js", + "version": "soljson-v0.5.16+commit.9c3226ce.js", "settings": { "optimizer": { "enabled": true, @@ -250,7 +250,7 @@ ] } }, - "evmVersion": "constantinople" + "evmVersion": "istanbul" } }, "chains": {} diff --git a/packages/contract-artifacts/artifacts/CoordinatorRegistry.json b/packages/contract-artifacts/artifacts/CoordinatorRegistry.json index e7c1f647a2..81316f4256 100644 --- a/packages/contract-artifacts/artifacts/CoordinatorRegistry.json +++ b/packages/contract-artifacts/artifacts/CoordinatorRegistry.json @@ -47,16 +47,16 @@ }, "evm": { "bytecode": { - "object": "0x608060405234801561001057600080fd5b506103e9806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80635b2388be1461003b5780636c90fedb146100ad575b600080fd5b6100ab6004803603602081101561005157600080fd5b81019060208101813564010000000081111561006c57600080fd5b82018360208201111561007e57600080fd5b803590602001918460018302840111640100000000831117156100a057600080fd5b509092509050610155565b005b6100e0600480360360208110156100c357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610227565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561011a578181015183820152602001610102565b50505050905090810190601f1680156101475780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b33600081815260208190526040902061016f9084846102fb565b507fd060052768902f3eecb84b8eae9d3a2608a1a9e60811a33968b46b8d552f266e818484604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018281038252848482818152602001925080828437600083820152604051601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016909201829003965090945050505050a1505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081815260409182902080548351601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001861615020190931692909204918201849004840281018401909452808452606093928301828280156102ef5780601f106102c4576101008083540402835291602001916102ef565b820191906000526020600020905b8154815290600101906020018083116102d257829003601f168201915b50505050509050919050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061035a578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555610387565b82800160010185558215610387579182015b8281111561038757823582559160200191906001019061036c565b50610393929150610397565b5090565b6103b191905b80821115610393576000815560010161039d565b9056fea265627a7a723158201e5700868fc146b88ffb53f2aacd9f9684387be927a7cb4fdb2da136413c17f964736f6c634300050d0032" + "object": "0x608060405234801561001057600080fd5b506103e9806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80635b2388be1461003b5780636c90fedb146100ad575b600080fd5b6100ab6004803603602081101561005157600080fd5b81019060208101813564010000000081111561006c57600080fd5b82018360208201111561007e57600080fd5b803590602001918460018302840111640100000000831117156100a057600080fd5b509092509050610155565b005b6100e0600480360360208110156100c357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610227565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561011a578181015183820152602001610102565b50505050905090810190601f1680156101475780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b33600081815260208190526040902061016f9084846102fb565b507fd060052768902f3eecb84b8eae9d3a2608a1a9e60811a33968b46b8d552f266e818484604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018281038252848482818152602001925080828437600083820152604051601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016909201829003965090945050505050a1505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081815260409182902080548351601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001861615020190931692909204918201849004840281018401909452808452606093928301828280156102ef5780601f106102c4576101008083540402835291602001916102ef565b820191906000526020600020905b8154815290600101906020018083116102d257829003601f168201915b50505050509050919050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061035a578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555610387565b82800160010185558215610387579182015b8281111561038757823582559160200191906001019061036c565b50610393929150610397565b5090565b6103b191905b80821115610393576000815560010161039d565b9056fea265627a7a72315820e93b5d7674acdd9933b6d0a1751b8cbceb8b51d6f0182e77f449213a4d321fc264736f6c63430005100032" }, "deployedBytecode": { - "object": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c80635b2388be1461003b5780636c90fedb146100ad575b600080fd5b6100ab6004803603602081101561005157600080fd5b81019060208101813564010000000081111561006c57600080fd5b82018360208201111561007e57600080fd5b803590602001918460018302840111640100000000831117156100a057600080fd5b509092509050610155565b005b6100e0600480360360208110156100c357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610227565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561011a578181015183820152602001610102565b50505050905090810190601f1680156101475780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b33600081815260208190526040902061016f9084846102fb565b507fd060052768902f3eecb84b8eae9d3a2608a1a9e60811a33968b46b8d552f266e818484604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018281038252848482818152602001925080828437600083820152604051601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016909201829003965090945050505050a1505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081815260409182902080548351601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001861615020190931692909204918201849004840281018401909452808452606093928301828280156102ef5780601f106102c4576101008083540402835291602001916102ef565b820191906000526020600020905b8154815290600101906020018083116102d257829003601f168201915b50505050509050919050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061035a578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555610387565b82800160010185558215610387579182015b8281111561038757823582559160200191906001019061036c565b50610393929150610397565b5090565b6103b191905b80821115610393576000815560010161039d565b9056fea265627a7a723158201e5700868fc146b88ffb53f2aacd9f9684387be927a7cb4fdb2da136413c17f964736f6c634300050d0032" + "object": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c80635b2388be1461003b5780636c90fedb146100ad575b600080fd5b6100ab6004803603602081101561005157600080fd5b81019060208101813564010000000081111561006c57600080fd5b82018360208201111561007e57600080fd5b803590602001918460018302840111640100000000831117156100a057600080fd5b509092509050610155565b005b6100e0600480360360208110156100c357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610227565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561011a578181015183820152602001610102565b50505050905090810190601f1680156101475780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b33600081815260208190526040902061016f9084846102fb565b507fd060052768902f3eecb84b8eae9d3a2608a1a9e60811a33968b46b8d552f266e818484604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018281038252848482818152602001925080828437600083820152604051601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016909201829003965090945050505050a1505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081815260409182902080548351601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001861615020190931692909204918201849004840281018401909452808452606093928301828280156102ef5780601f106102c4576101008083540402835291602001916102ef565b820191906000526020600020905b8154815290600101906020018083116102d257829003601f168201915b50505050509050919050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061035a578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555610387565b82800160010185558215610387579182015b8281111561038757823582559160200191906001019061036c565b50610393929150610397565b5090565b6103b191905b80821115610393576000815560010161039d565b9056fea265627a7a72315820e93b5d7674acdd9933b6d0a1751b8cbceb8b51d6f0182e77f449213a4d321fc264736f6c63430005100032" } } }, "compiler": { "name": "solc", - "version": "soljson-v0.5.13+commit.5b0b510c.js", + "version": "soljson-v0.5.16+commit.9c3226ce.js", "settings": { "optimizer": { "enabled": true, @@ -75,7 +75,7 @@ ] } }, - "evmVersion": "constantinople" + "evmVersion": "istanbul" } }, "chains": {} diff --git a/packages/contract-artifacts/artifacts/DevUtils.json b/packages/contract-artifacts/artifacts/DevUtils.json index d3928a64c4..ad17ad4579 100644 --- a/packages/contract-artifacts/artifacts/DevUtils.json +++ b/packages/contract-artifacts/artifacts/DevUtils.json @@ -553,7 +553,7 @@ "outputs": [ { "components": [ - { "internalType": "uint8", "name": "orderStatus", "type": "uint8" }, + { "internalType": "enum LibOrder.OrderStatus", "name": "orderStatus", "type": "uint8" }, { "internalType": "bytes32", "name": "orderHash", "type": "bytes32" }, { "internalType": "uint256", "name": "orderTakerAssetFilledAmount", "type": "uint256" } ], @@ -598,7 +598,7 @@ "outputs": [ { "components": [ - { "internalType": "uint8", "name": "orderStatus", "type": "uint8" }, + { "internalType": "enum LibOrder.OrderStatus", "name": "orderStatus", "type": "uint8" }, { "internalType": "bytes32", "name": "orderHash", "type": "bytes32" }, { "internalType": "uint256", "name": "orderTakerAssetFilledAmount", "type": "uint256" } ], @@ -1038,16 +1038,16 @@ }, "evm": { "bytecode": { - "object": "0x60806040523480156200001157600080fd5b5060405162005d5238038062005d528339810160408190526200003491620004b7565b600080546001600160a01b0319166001600160a01b03838116919091178083556040517f6070410800000000000000000000000000000000000000000000000000000000815283928592839283929190911690636070410890620000bd907ff47261b00000000000000000000000000000000000000000000000000000000090600401620004e7565b60206040518083038186803b158015620000d657600080fd5b505afa158015620000eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620001119190810190620004b7565b600180546001600160a01b0319166001600160a01b039283161790556000546040517f607041080000000000000000000000000000000000000000000000000000000081529116906360704108906200018f907f025717920000000000000000000000000000000000000000000000000000000090600401620004e7565b60206040518083038186803b158015620001a857600080fd5b505afa158015620001bd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620001e39190810190620004b7565b600280546001600160a01b0319166001600160a01b039283161790556000546040517f6070410800000000000000000000000000000000000000000000000000000000815291169063607041089062000261907fa7cb5fb70000000000000000000000000000000000000000000000000000000090600401620004e7565b60206040518083038186803b1580156200027a57600080fd5b505afa1580156200028f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620002b59190810190620004b7565b600380546001600160a01b0319166001600160a01b039283161790556000546040517f6070410800000000000000000000000000000000000000000000000000000000815291169063607041089062000333907fc339d10a0000000000000000000000000000000000000000000000000000000090600401620004e7565b60206040518083038186803b1580156200034c57600080fd5b505afa15801562000361573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620003879190810190620004b7565b600480546001600160a01b03199081166001600160a01b039384161790915560058054909116938216939093179092555060009150821615620003cb5781620003cd565b305b9050620004526040518060400160405280600b81526020017f30782050726f746f636f6c0000000000000000000000000000000000000000008152506040518060400160405280600581526020017f332e302e3000000000000000000000000000000000000000000000000000000081525085846200046060201b6200358a1760201c565b600655506200051492505050565b8351602094850120835193850193909320604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f815295860194909452928401929092526060830152608082015260a0902090565b600060208284031215620004c9578081fd5b81516001600160a01b0381168114620004e0578182fd5b9392505050565b7fffffffff0000000000000000000000000000000000000000000000000000000091909116815260200190565b61582e80620005246000396000f3fe608060405234801561001057600080fd5b50600436106102745760003560e01c80639a7e752611610151578063ca49f47c116100c3578063d3d862d111610087578063d3d862d1146106a9578063d4695028146106bc578063e25cabf7146106dc578063e4e6e7da146106fe578063e77286eb1461071f578063ee4f5a941461074157610274565b8063ca49f47c1461062c578063cafd3a071461064f578063d001c5dc14610670578063d186037f14610683578063d36379051461069657610274565b8063a6627e9f11610115578063a6627e9f14610598578063acaedc74146105ab578063b43cffe1146105ce578063bbb2dcf6146105e1578063bc03f96414610603578063c26cfecd1461062457610274565b80639a7e75261461050b5780639eadc8351461052e578063a070cac814610552578063a0901e5114610565578063a5cd62ba1461057857610274565b80634dfdac20116101ea5780637914b2ec116101ae5780637914b2ec146104705780637982653e1461049157806379c9c426146104b15780637b66ad34146104c45780637d727512146104e55780638f4ce479146104f857610274565b80634dfdac20146103d8578063590aa875146103f857806363eb399214610418578063651290421461042b5780636f83188e1461044d57610274565b8063314853ff1161023c578063314853ff14610328578063327d30541461034a57806332aae3ad1461035d5780633db6dc611461037f578063459be5e2146103a257806346eb65cb146103c357610274565b806302d0aec31461027957806304a5618a146102a35780630d7b7d76146102c5578063165979e1146102e65780632322cf7614610308575b600080fd5b61028c610287366004614851565b610763565b60405161029a92919061528b565b60405180910390f35b6102b66102b1366004614851565b6107bf565b60405161029a9392919061537d565b6102d86102d336600461438f565b61083a565b60405161029a929190615239565b6102f96102f4366004614851565b61085c565b60405161029a939291906154b7565b61031b61031636600461438f565b6108b9565b60405161029a91906151f4565b61033b610336366004614851565b6108e1565b60405161029a93929190615260565b6102d8610358366004614851565b610928565b61037061036b366004614851565b61096a565b60405161029a9392919061542d565b61039261038d366004614851565b6109bd565b60405161029a94939291906151fd565b6103b56103b0366004614851565b610a07565b60405161029a9291906154a0565b6103d66103d1366004614851565b610a5d565b005b6103eb6103e63660046142b8565b610b59565b60405161029a919061518e565b61040b610406366004614133565b610bdc565b60405161029a91906153dc565b61040b6104263660046143d2565b610c32565b61043e610439366004614851565b610c8f565b60405161029a93929190614f43565b61046061045b366004614851565b610cc9565b60405161029a949392919061552c565b61048361047e366004614851565b6114d6565b60405161029a9291906152bd565b6104a461049f3660046148fa565b61150e565b60405161029a91906154d2565b61031b6104bf366004614aa9565b611795565b6104d76104d2366004614851565b6117f4565b60405161029a929190614f29565b61031b6104f336600461438f565b61182c565b610483610506366004614851565b611daf565b61051e610519366004614851565b611e0c565b60405161029a94939291906154e6565b61054161053c366004614851565b611e6d565b60405161029a9594939291906152e0565b61031b6105603660046149a7565b611ee5565b6103eb610573366004614453565b611f3c565b61058b6105863660046144b7565b611fb5565b60405161029a9190615095565b61040b6105a6366004614428565b612078565b6105be6105b9366004614851565b6120d1565b60405161029a9493929190614fef565b61040b6105dc366004614305565b61210d565b6105f46105ef366004614851565b61216c565b60405161029a939291906153a8565b610616610611366004614851565b6121e6565b60405161029a929190615247565b61031b61221f565b61063f61063a366004614851565b612225565b60405161029a9493929190615338565b61066261065d366004614851565b6122a3565b60405161029a92919061551f565b6103eb61067e3660046142b8565b6122f1565b61031b61069136600461438f565b61235f565b6104a46106a43660046148fa565b6127e9565b61040b6106b736600461465b565b612b49565b6106cf6106ca366004614851565b612b68565b60405161029a91906152a8565b6106ef6106ea36600461453a565b612c1d565b60405161029a939291906150e2565b61071161070c3660046142b8565b612d55565b60405161029a9291906151cf565b61073261072d366004614951565b612d6e565b60405161029a93929190615692565b61075461074f366004614851565b612fa6565b60405161029a93929190615476565b60008061077783610772612fe3565b612fee565b6000610790600485518661302e9092919063ffffffff16565b8060200190516107a39190810190614804565b909350905060ff811660068111156107b757fe5b915050915091565b600080806107d3848263ffffffff61307116565b92506001600160e01b0319831663012b8bc960e11b1461080e5760405162461bcd60e51b81526004016108059061566a565b60405180910390fd5b61081f84601063ffffffff6130a516565b915061083284602463ffffffff6130d816565b929491935050565b600080610847848461182c565b9150610853848461235f565b90509250929050565b600080600061086d846107726130e4565b6000610886600486518761302e9092919063ffffffff16565b8060200190516108999190810190614c84565b9094509250905060ff811660028111156108af57fe5b9350509193909250565b60008060006108c8858561083a565b915091506108d682826130ef565b925050505b92915050565b60006060806108f284610772613105565b835161090890859060049063ffffffff61302e16565b80602001905161091b91908101906147a5565b9196909550909350915050565b60008061093783610772613110565b825161094d90849060049063ffffffff61302e16565b8060200190516109609190810190614748565b9094909350915050565b600080606061097b8461077261311b565b6000610994600486518761302e9092919063ffffffff16565b8060200190516109a79190810190614c39565b9094509250905060ff811660018111156108af57fe5b6000806060806109cf85610772613126565b84516109e590869060049063ffffffff61302e16565b8060200190516109f89190810190614705565b92989197509550909350915050565b600080610a1683610772613131565b6000610a2f600485518661302e9092919063ffffffff16565b806020019051610a429190810190614b78565b9250905060ff81166003811115610a5557fe5b925050915091565b6000610a6f828263ffffffff61307116565b90506001600160e01b03198116630f47261b60e41b1415610a9a57610a9382611daf565b5050610b55565b6001600160e01b0319811663012b8bc960e11b1415610ac457610abc826107bf565b505050610b55565b6001600160e01b0319811663a7cb5fb760e01b1415610af057610ae682611e6d565b5050505050610b55565b6001600160e01b031981166394cfcdd760e01b1415610b1257610abc8261216c565b6001600160e01b0319811663619ce88560e11b1415610b3d57610b3482612225565b50505050610b55565b60405162461bcd60e51b81526004016108059061566a565b5050565b606060008251905080604051908082528060200260200182016040528015610b8b578160200160208202803883390190505b50915060005b818114610bd457610bb585858381518110610ba857fe5b602002602001015161235f565b838281518110610bc157fe5b6020908102919091010152600101610b91565b505092915050565b604051606090630f47261b60e41b90610bf9908490602401614f15565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050919050565b60405160609063619ce88560e11b90610c5390869086908690602401614fbb565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915290505b9392505050565b6000806000610ca08461077261313c565b8351610cb690859060049063ffffffff61302e16565b80602001905161091b9190810190614188565b60608080806000610ce0868263ffffffff61307116565b90506001600160e01b0319811663dedfc1f160e01b1415610d2c5760405180604001604052806011815260200170626174636843616e63656c4f726465727360781b81525094506110d8565b6001600160e01b03198116634b4a520160e11b1415610d74576040518060400160405280600f81526020016e626174636846696c6c4f726465727360881b81525094506110d8565b6001600160e01b031981166323aa37f960e21b1415610dc35760405180604001604052806016815260200175626174636846696c6c4f72646572734e6f5468726f7760501b81525094506110d8565b6001600160e01b03198116632fbb8b8560e21b1415610e115760405180604001604052806015815260200174626174636846696c6c4f724b696c6c4f726465727360581b81525094506110d8565b6001600160e01b03198116632da6298760e01b1415610e55576040518060400160405280600b81526020016a31b0b731b2b627b93232b960a91b81525094506110d8565b6001600160e01b03198116634da26aab60e11b1415610e9757604051806040016040528060098152602001683334b63627b93232b960b91b81525094506110d8565b6001600160e01b03198116633852d63160e21b1415610edf576040518060400160405280600f81526020016e3334b63627b925b4b63627b93232b960891b81525094506110d8565b6001600160e01b031981166378d29ac160e01b1415610f2e57604051806040016040528060168152602001756d61726b65744275794f72646572734e6f5468726f7760501b81525094506110d8565b6001600160e01b0319811663369da09960e01b1415610f84576040518060400160405280601781526020017f6d61726b657453656c6c4f72646572734e6f5468726f7700000000000000000081525094506110d8565b6001600160e01b03198116638bc8efb360e01b1415610fda576040518060400160405280601981526020017f6d61726b65744275794f726465727346696c6c4f724b696c6c0000000000000081525094506110d8565b6001600160e01b0319811663a6c3bf3360e01b1415611030576040518060400160405280601a81526020017f6d61726b657453656c6c4f726465727346696c6c4f724b696c6c00000000000081525094506110d8565b6001600160e01b031981166388ec79fb60e01b1415611074576040518060400160405280600b81526020016a6d617463684f726465727360a81b81525094506110d8565b6001600160e01b03198116634f9559b160e01b14806110a357506001600160e01b031981166302280c9160e41b145b156110c05760405162461bcd60e51b81526004016108059061561d565b60405162461bcd60e51b8152600401610805906155e6565b6001600160e01b0319811663dedfc1f160e01b141561116457855161110790879060049063ffffffff61314716565b80602001905161111a9190810190614485565b604080516000808252602082019092529195505b506040805160008082526020820190925291945061115c565b60608152602001906001900390816111475790505b5091506114ce565b6001600160e01b03198116632fbb8b8560e21b148061119357506001600160e01b03198116634b4a520160e11b145b806111ae57506001600160e01b031981166323aa37f960e21b145b156111c8576111bc866131c7565b919550935091506114ce565b6001600160e01b03198116632da6298760e01b14156112975760408051600180825281830190925290816020015b6111fe613a68565b8152602001906001900390816111f6575050865190945061122990879060049063ffffffff61314716565b80602001905161123c91908101906148c8565b8460008151811061124957fe5b6020026020010181905250600060405190808252806020026020018201604052801561112e57816020016020820280388339019050506040805160008082526020820190925291945061115c565b6001600160e01b03198116633852d63160e21b14806112c657506001600160e01b03198116634da26aab60e11b145b156112d4576111bc866131f6565b6001600160e01b031981166378d29ac160e01b148061130357506001600160e01b0319811663369da09960e01b145b8061131e57506001600160e01b03198116638bc8efb360e01b145b8061133957506001600160e01b0319811663a6c3bf3360e01b145b15611347576111bc866132f0565b6001600160e01b031981166388ec79fb60e01b14156114ce57611368613a68565b611370613a68565b60608061138a60048b518c6131479092919063ffffffff16565b80602001905161139d91908101906149ff565b604080516002808252606082019092529498509296509094509250816020015b6113c5613a68565b8152602001906001900390816113bd57905050975083886000815181106113e857fe5b6020026020010181905250828860018151811061140157fe5b602090810291909101015260408051600280825260608201909252908160200160208202803883390190505096508360a001518760008151811061144157fe5b6020026020010181815250508260a001518760018151811061145f57fe5b60209081029190910101526040805160028082526060820190925290816020015b606081526020019060019003908161148057905050955081866000815181106114a557fe5b602002602001018190525080866001815181106114be57fe5b6020026020010181905250505050505b509193509193565b6000806114e583610772613364565b82516114fb90849060049063ffffffff61302e16565b8060200190516109609190810190614828565b6000611518613afb565b6115a98584600560009054906101000a90046001600160a01b03166001600160a01b0316631ce4c78b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561156b57600080fd5b505afa15801561157f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115a39190810190614b60565b3a61336e565b60408051600280825260608281019093529293509091816020015b60608152602001906001900390816115c457505060408051600280825260608083018452939450909160208301908038833950506040805160028082526060808301845294955090925090602083019080388339505060408051600280825260608083018452949550909250906020830190803883390190505090508861014001518460008151811061165357fe5b602002602001018190525088600001518360008151811061167057fe5b60200260200101906001600160a01b031690816001600160a01b031681525050878260008151811061169e57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508460000151816000815181106116d057fe5b602002602001018181525050886101800151846001815181106116ef57fe5b602002602001018190525088600001518360018151811061170c57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505088604001518260018151811061173e57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505084604001518160018151811061177057fe5b602002602001018181525050611788848484846133e5565b9998505050505050505050565b60006117ec846117e76040518060400160405280600b81526020016a0c1e08141c9bdd1bd8dbdb60aa1b815250604051806040016040528060058152602001640332e302e360dc1b815250878761358a565b6135e1565b949350505050565b600080611803836107726135f5565b825161181990849060049063ffffffff61302e16565b806020019051610960919081019061414f565b60008061183f838263ffffffff61307116565b90506001600160e01b03198116630f47261b60e41b141561195857600061186d84601063ffffffff6130a516565b6040519091506060906370a0823160e01b9061188d908890602401614f15565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060836001600160a01b0316836040516118de9190614ef9565b600060405180830381855afa9150503d8060008114611919576040519150601f19603f3d011682016040523d82523d6000602084013e61191e565b606091505b5091509150818015611931575080516020145b61193c57600061194d565b61194d81600063ffffffff6130d816565b955050505050611da8565b6001600160e01b0319811663012b8bc960e11b1415611a975760008061197d856107bf565b6040519194509250606091506331a9108f60e11b906119a09084906024016151f4565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060846001600160a01b0316836040516119f19190614ef9565b600060405180830381855afa9150503d8060008114611a2c576040519150601f19603f3d011682016040523d82523d6000602084013e611a31565b606091505b50915091506000828015611a46575081516020145b611a51576000611a62565b611a6282600c63ffffffff6130a516565b9050896001600160a01b0316816001600160a01b031614611a84576000611a87565b60015b60ff169750505050505050611da8565b6001600160e01b0319811663a7cb5fb760e01b1415611c1e576000606080611abe86611e6d565b5081519296509094509250905060005b818114611c14578351606090627eeac760e11b908b90879085908110611af057fe5b6020026020010151604051602401611b09929190615025565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060876001600160a01b031683604051611b5a9190614ef9565b600060405180830381855afa9150503d8060008114611b95576040519150601f19603f3d011682016040523d82523d6000602084013e611b9a565b606091505b50915091506000828015611baf575081516020145b611bba576000611bcb565b611bcb82600063ffffffff6130d816565b90506000878681518110611bdb57fe5b60200260200101518281611beb57fe5b0490508b811080611bfa57508b155b15611c0357809b505b505060019093019250611ace915050565b5050505050611da8565b6001600160e01b0319811663619ce88560e11b1415611d0a57604051606090632a17967960e21b90611c5b908690600090819081906024016153ef565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925260045491519092506000916001600160a01b031690611cad908490614ef9565b600060405180830381855afa9150503d8060008114611ce8576040519150601f19603f3d011682016040523d82523d6000602084013e611ced565b606091505b5050905080611cfd576000611d01565b6000195b93505050611da8565b6001600160e01b031981166394cfcdd760e01b1415611da857606080611d2f8561216c565b80519194509250905060005b818114611da3576000611d6189858481518110611d5457fe5b602002602001015161182c565b90506000858381518110611d7157fe5b60200260200101518281611d8157fe5b04905087811080611d90575087155b15611d99578097505b5050600101611d3b565b505050505b5092915050565b600080611dc2838263ffffffff61307116565b91506001600160e01b03198216630f47261b60e41b14611df45760405162461bcd60e51b81526004016108059061566a565b611e0583601063ffffffff6130a516565b9050915091565b60008060006060611e1f85610772613600565b6000611e38600487518861302e9092919063ffffffff16565b806020019051611e4b9190810190614bdc565b91965094509250905060ff81166006811115611e6357fe5b9450509193509193565b60008060608080611e84868563ffffffff61307116565b94506001600160e01b0319851663a7cb5fb760e01b14611eb65760405162461bcd60e51b81526004016108059061566a565b505050506024828101516044840151606485015160848601519496929591820184019490820184019391010190565b60006117ec84611f376040518060400160405280600b81526020016a0c1e08141c9bdd1bd8dbdb60aa1b815250604051806040016040528060058152602001640332e302e360dc1b815250878761358a565b61360b565b6060808251604051908082528060200260200182016040528015611f6a578160200160208202803883390190505b50905060005b83518114611da857838181518110611f8457fe5b60200260200101516001600160a01b031631828281518110611fa257fe5b6020908102919091010152600101611f70565b606060008451905080604051908082528060200260200182016040528015611fe7578160200160208202803883390190505b50915060005b81811461206f5761203886828151811061200357fe5b602002602001015186838151811061201757fe5b602002602001015186848151811061202b57fe5b60200260200101516127e9565b83828151811061204457fe5b6020026020010190600481111561205757fe5b9081600481111561206457fe5b905250600101611fed565b50509392505050565b60405160609063012b8bc960e11b906120979085908590602401615025565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905092915050565b600060608060606120e48561077261361a565b84516120fa90869060049063ffffffff61302e16565b8060200190516109f89190810190614221565b60405160609063a7cb5fb760e01b90612130908790879087908790602401614f67565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050949350505050565b6000606080612181848463ffffffff61307116565b92506001600160e01b031983166394cfcdd760e01b146121b35760405162461bcd60e51b81526004016108059061566a565b83516121c990859060049063ffffffff61314716565b8060200190516121dc919081019061468f565b9395909450915050565b600060606121f683610772613625565b825161220c90849060049063ffffffff61302e16565b806020019051610960919081019061476b565b60065481565b60008060608161223b858263ffffffff61307116565b93506001600160e01b0319841663619ce88560e11b1461226d5760405162461bcd60e51b81526004016108059061566a565b845161228390869060049063ffffffff61314716565b80602001905161229691908101906141ca565b9597919650949350915050565b6000806122b283610772613630565b60006122cb600485518661302e9092919063ffffffff16565b8060200190516122de9190810190614b78565b9250905060ff81166001811115610a5557fe5b606060008251905080604051908082528060200260200182016040528015612323578160200160208202803883390190505b50915060005b818114610bd45761234085858381518110611d5457fe5b83828151811061234c57fe5b6020908102919091010152600101612329565b600080612372838263ffffffff61307116565b90506001600160e01b031981166394cfcdd760e01b141561240b576060806123998561216c565b80519194509250905060005b8181146124005760006123be89858481518110610ba857fe5b905060008583815181106123ce57fe5b602002602001015182816123de57fe5b049050878110806123ed575087155b156123f6578097505b50506001016123a5565b506108db9350505050565b6001600160e01b03198116630f47261b60e41b141561246457600061243784601063ffffffff6130a516565b600154604051919250606091636eb1769f60e11b9161188d9189916001600160a01b031690602401614f29565b6001600160e01b0319811663012b8bc960e11b141561269757600080612489856107bf565b6002546040519295509093506060925063e985e9c560e01b916124bc918a916001600160a01b0390911690602401614f29565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060846001600160a01b03168360405161250d9190614ef9565b600060405180830381855afa9150503d8060008114612548576040519150601f19603f3d011682016040523d82523d6000602084013e61254d565b606091505b509150915081158061256157508051602014155b8061257d575061257881600063ffffffff6130d816565b600114155b156126885760405160609063020604bf60e21b9061259f9087906024016151f4565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050856001600160a01b0316816040516125ec9190614ef9565b600060405180830381855afa9150503d8060008114612627576040519150601f19603f3d011682016040523d82523d6000602084013e61262c565b606091505b509093509150828015612640575081516020145b801561266f57506002546001600160a01b031661266483600c63ffffffff6130a516565b6001600160a01b0316145b61267a57600061267d565b60015b60ff16975050611c14565b60001996505050505050611da8565b6001600160e01b0319811663a7cb5fb760e01b14156127c55760006126bb84611e6d565b50506003546040519294506060935063e985e9c560e01b926126ec925089916001600160a01b031690602401614f29565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060836001600160a01b03168360405161273d9190614ef9565b600060405180830381855afa9150503d8060008114612778576040519150601f19603f3d011682016040523d82523d6000602084013e61277d565b606091505b5091509150818015612790575080516020145b80156127ac57506127a881600063ffffffff6130d816565b6001145b6127b757600061194d565b600019955050505050611da8565b6001600160e01b0319811663619ce88560e11b1415611da857506000199392505050565b60006127f3613afb565b6128468584600560009054906101000a90046001600160a01b03166001600160a01b0316631ce4c78b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561156b57600080fd5b60408051600480825260a0820190925291925060609190816020015b606081526020019060019003908161286257505060408051600480825260a082019092529192506060919060208201608080388339505060408051600480825260a08201909252929350606092915060208201608080388339505060408051600480825260a08201909252929350606092915060208201608080388339019050509050886101600151846000815181106128f857fe5b6020026020010181905250878360008151811061291157fe5b60200260200101906001600160a01b031690816001600160a01b03168152505088600001518260008151811061294357fe5b60200260200101906001600160a01b031690816001600160a01b031681525050868160008151811061297157fe5b6020026020010181815250508861014001518460018151811061299057fe5b60200260200101819052508860000151836001815181106129ad57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505087826001815181106129db57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050846000015181600181518110612a0d57fe5b602002602001018181525050886101a0015184600281518110612a2c57fe5b60200260200101819052508783600281518110612a4557fe5b60200260200101906001600160a01b031690816001600160a01b031681525050886040015182600281518110612a7757fe5b60200260200101906001600160a01b031690816001600160a01b031681525050846060015181600281518110612aa957fe5b60200260200101818152505088610180015184600381518110612ac857fe5b6020026020010181905250886000015183600381518110612ae557fe5b60200260200101906001600160a01b031690816001600160a01b031681525050886040015182600381518110612b1757fe5b60200260200101906001600160a01b031690816001600160a01b03168152505084604001518160038151811061177057fe5b6040516060906394cfcdd760e01b9061209790859085906024016151a1565b6000612b7a828263ffffffff61307116565b90506001600160e01b03198116630f47261b60e41b1480612bab57506001600160e01b0319811663012b8bc960e11b145b80612bc657506001600160e01b0319811663a7cb5fb760e01b145b80612be157506001600160e01b031981166394cfcdd760e01b145b80612bfc57506001600160e01b0319811663619ce88560e11b145b612c185760405162461bcd60e51b81526004016108059061566a565b919050565b606080606060008551905080604051908082528060200260200182016040528015612c6257816020015b612c4f613b2a565b815260200190600190039081612c475790505b50935080604051908082528060200260200182016040528015612c8f578160200160208202803883390190505b50925080604051908082528060200260200182016040528015612cbc578160200160208202803883390190505b50915060005b818114612d4c57612cf9878281518110612cd857fe5b6020026020010151878381518110612cec57fe5b6020026020010151612d6e565b8751889085908110612d0757fe5b60200260200101878581518110612d1a57fe5b60200260200101878681518110612d2d57fe5b9315156020948502919091019093019290925291905252600101612cc2565b50509250925092565b606080612d6284846122f1565b91506108538484610b59565b612d76613b2a565b600554604051639d3fa4b960e01b815260009182916001600160a01b0390911690639d3fa4b990612dab9088906004016156b6565b60606040518083038186803b158015612dc357600080fd5b505afa158015612dd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612dfb9190810190614883565b855160055460405163a12dcc6f60e01b815292955090916001600160a01b039091169063a12dcc6f90612e3490899089906004016156c9565b60206040518083038186803b158015612e4c57600080fd5b505afa158015612e60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612e8491908101906146e5565b91506000612e97828861014001516108b9565b60a088015160c08901516101808a01516101408b015193945091929091600091612ec69163ffffffff61363b16565b15612ef357612eec84612ee6848d6080015161366090919063ffffffff16565b8561367c565b9050612f4c565b81612f0757612eec848b608001518561367c565b6000612f18868c61018001516108b9565b90506000612f2b868d608001518761367c565b90506000612f3a83868861367c565b9050612f4682826130ef565b93505050505b612f6c612f6689604001518561369e90919063ffffffff16565b826130ef565b96506004612f7f8b8c602001518a61150e565b6004811115612f8a57fe5b14612f96576000612f98565b865b965050505050509250925092565b6000806000612fb7846107726136bd565b6000612fd0600486518761302e9092919063ffffffff16565b8060200190516108999190810190614ba5565b63fdb6ca8d60e01b90565b6000612ffb836000613071565b90506001600160e01b0319808216908316146130295760405162461bcd60e51b815260040161080590615644565b505050565b60608183111561304c5761304c613047600085856136c8565b6136e7565b83518211156130655761306561304760018487516136c8565b50819003910190815290565b600081600401835110156130925761309261304760038551856004016136c8565b5001602001516001600160e01b03191690565b600081601401835110156130c6576130c661304760048551856014016136c8565b5001601401516001600160a01b031690565b6000610c8883836136ef565b6318e4b14160e01b90565b60008183106130fe5781610c88565b5090919050565b634678472b60e01b90565b63b6555d6f60e01b90565b6324410cd360e11b90565b631b8388f760e01b90565b630e94a7ed60e41b90565b634ad3127560e01b90565b60608183111561316057613160613047600085856136c8565b83518211156131795761317961304760018487516136c8565b8282036040519080825280601f01601f1916602001820160405280156131a6576020820181803883390190505b509050610c886131b582613719565b846131bf87613719565b01835161371f565b60608060606131e360048551866131479092919063ffffffff16565b80602001905161091b9190810190614590565b60408051600180825281830190925260609182918291816020015b613219613a68565b8152602001906001900390816132115750506040805160018082528183019092529194506020808301908038833901905050604080516001808252818301909252919350816020015b6060815260200190600190039081613262575050845190915061328f90859060049063ffffffff61314716565b8060200190516132a29190810190614a57565b856000815181106132af57fe5b60200260200101856000815181106132c357fe5b60200260200101856000815181106132d757fe5b6020908102919091010192909252919052529193909250565b60408051600180825281830190925260609182918291602080830190803883395050855191935061332c9186915060049063ffffffff61314716565b80602001905161333f9190810190614609565b8451859060009061334c57fe5b60209081029190910101919091529095929450925050565b628e3db960e51b90565b613376613afb565b6020810184905260a085015160808601516133929186916137c4565b815260a085015160c08601516133a99186916137c4565b604082015260a085015160e08601516133c39186916137c4565b60608201526133d8828463ffffffff6137f816565b6080820152949350505050565b60405160009060609063b04fbddd60e01b9061340b90889088908890889060240161503e565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925260055491519092506060916001600160a01b03169061345d908490614ef9565b6000604051808303816000865af19150503d806000811461349a576040519150601f19603f3d011682016040523d82523d6000602084013e61349f565b606091505b509150600090506134b6828263ffffffff61307116565b90506134c061311b565b6001600160e01b0319828116911614156134fd5760006134df8361096a565b5091505060ff811660048111156134f257fe5b9450505050506117ec565b613505613105565b6001600160e01b031982811691161415613538576000613524836108e1565b509091505060ff811660048111156134f257fe5b815160208301207ff43f26ea5a94b478394a975e856464913dc1a8a1ca70939d974aa7c238aa0ce0141561357257600493505050506117ec565b60405162461bcd60e51b8152600401610805906155b9565b8351602094850120835193850193909320604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f815295860194909452928401929092526060830152608082015260a0902090565b6000610c88826135f085613829565b6138a4565b6350ae068360e11b90565b630fcb446360e31b90565b6000610c88826135f0856138c3565b635bd0428d60e01b90565b6320d11f6160e01b90565b633d66146160e21b90565b600081518351148015610c885750508051602091820120825192909101919091201490565b600082820183811015610c8857610c886130476000868661397c565b60006117ec83613692868563ffffffff6137f816565b9063ffffffff61399b16565b6000828211156136b7576136b76130476002858561397c565b50900390565b631ca78ed960e31b90565b6060632800659560e01b848484604051602401610c53939291906154c4565b805160208201fd5b600081602001835110156137105761371061304760058551856020016136c8565b50016020015190565b60200190565b6020811015613749576001816020036101000a038019835116818551168082178652505050613029565b8282141561375657613029565b828211156137905760208103905080820181840181515b8285101561378857845186526020958601959094019361376d565b905250613029565b60208103905080820181840183515b818612156137bb5782518252601f19928301929091019061379f565b85525050505050565b60006137d18484846139c5565b156137e4576137e4613047858585613a2b565b6117ec83613692868563ffffffff6137f816565b600082613807575060006108db565b8282028284828161381457fe5b0414610c8857610c886130476001868661397c565b608081810151825160208085015160408087015160609788015186519685019690962082517fec69816980a3a3ca4554410e60253953e9ff375ba4536a98adfa15cc7154150881529485019590955290830191909152948101949094526001600160a01b039091169183019190915260a082015260c0902090565b60405161190160f01b8152600281019290925260228201526042902090565b6101408101516101608201516101808301516101a08401516000937ff80322eb8376aafb64eadf8f0d7623f22130fd9491a221e902b713cb984a75349390929091602087101561390f57fe5b601f1987018051610140890180516101608b0180516101808d0180516101a08f0180519d89528c5160209d8e012087528b519b8d019b909b2084528951998c01999099208152875197909a019690962088526101e085209390945290529190529252919091529050919050565b606063e946c1bb60e01b848484604051602401610c5393929190615455565b6000816139b1576139b16130476003858561397c565b60008284816139bc57fe5b04949350505050565b6000826139d7576139d7613047613a4a565b8115806139e2575083155b156139ef57506000610c88565b600083806139f957fe5b8584099050613a0e858463ffffffff6137f816565b613a20826103e863ffffffff6137f816565b101595945050505050565b606063339f3de260e01b848484604051602401610c53939291906156ee565b60408051808201909152600481526329e460df60e21b602082015290565b604051806101c0016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001606081525090565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b80356108db816157c7565b80516108db816157c7565b600082601f830112613b70578081fd5b8135613b83613b7e8261572a565b615704565b818152915060208083019084810181840286018201871015613ba457600080fd5b60005b84811015611da3578135613bba816157c7565b84529282019290820190600101613ba7565b600082601f830112613bdc578081fd5b8151613bea613b7e8261572a565b8181529150602080830190840160005b83811015613c2757613c128760208451890101613e4c565b83526020928301929190910190600101613bfa565b5050505092915050565b600082601f830112613c41578081fd5b8135613c4f613b7e8261572a565b8181529150602080830190840160005b83811015613c2757613c778760208435890101613dfe565b83526020928301929190910190600101613c5f565b600082601f830112613c9c578081fd5b8151613caa613b7e8261572a565b8181529150602080830190840160005b83811015613c2757613cd28760208451890101613fe0565b83526020928301929190910190600101613cba565b600082601f830112613cf7578081fd5b8135613d05613b7e8261572a565b8181529150602080830190840160005b83811015613c2757613d2d8760208435890101613e92565b83526020928301929190910190600101613d15565b600082601f830112613d52578081fd5b8151613d60613b7e8261572a565b818152915060208083019084810181840286018201871015613d8157600080fd5b60005b84811015611da357815184529282019290820190600101613d84565b600082601f830112613db0578081fd5b8135613dbe613b7e8261572a565b818152915060208083019084810181840286018201871015613ddf57600080fd5b60005b84811015611da357813584529282019290820190600101613de2565b600082601f830112613e0e578081fd5b8135613e1c613b7e82615749565b9150808252836020828501011115613e3357600080fd5b8060208401602084013760009082016020015292915050565b600082601f830112613e5c578081fd5b8151613e6a613b7e82615749565b9150808252836020828501011115613e8157600080fd5b611da881602084016020860161576c565b60006101c0808385031215613ea5578182fd5b613eae81615704565b915050613ebb8383613b4a565b8152613eca8360208401613b4a565b6020820152613edc8360408401613b4a565b6040820152613eee8360608401613b4a565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e0820152610100808301358183015250610120808301358183015250610140808301356001600160401b0380821115613f4f57600080fd5b613f5b86838701613dfe565b83850152610160925082850135915080821115613f7757600080fd5b613f8386838701613dfe565b83850152610180925082850135915080821115613f9f57600080fd5b613fab86838701613dfe565b838501526101a0925082850135915080821115613fc757600080fd5b50613fd485828601613dfe565b82840152505092915050565b60006101c0808385031215613ff3578182fd5b613ffc81615704565b9150506140098383613b55565b81526140188360208401613b55565b602082015261402a8360408401613b55565b604082015261403c8360608401613b55565b60608201526080820151608082015260a082015160a082015260c082015160c082015260e082015160e0820152610100808301518183015250610120808301518183015250610140808301516001600160401b038082111561409d57600080fd5b6140a986838701613e4c565b838501526101609250828501519150808211156140c557600080fd5b6140d186838701613e4c565b838501526101809250828501519150808211156140ed57600080fd5b6140f986838701613e4c565b838501526101a092508285015191508082111561411557600080fd5b50613fd485828601613e4c565b805160ff811681146108db57600080fd5b600060208284031215614144578081fd5b8135610c88816157c7565b60008060408385031215614161578081fd5b825161416c816157c7565b602084015190925061417d816157c7565b809150509250929050565b60008060006060848603121561419c578081fd5b83516141a7816157c7565b60208501519093506141b8816157c7565b80925050604084015190509250925092565b6000806000606084860312156141de578081fd5b83516141e9816157c7565b60208501519093506001600160401b03811115614204578182fd5b61421086828701613e4c565b925050604084015190509250925092565b60008060008060808587031215614236578182fd5b8451614241816157c7565b60208601519094506001600160401b038082111561425d578384fd5b61426988838901613e4c565b9450604087015191508082111561427e578384fd5b61428a88838901613e4c565b9350606087015191508082111561429f578283fd5b506142ac87828801613e4c565b91505092959194509250565b600080604083850312156142ca578182fd5b82356142d5816157c7565b915060208301356001600160401b038111156142ef578182fd5b6142fb85828601613c31565b9150509250929050565b6000806000806080858703121561431a578182fd5b8435614325816157c7565b935060208501356001600160401b0380821115614340578384fd5b61434c88838901613da0565b94506040870135915080821115614361578384fd5b61436d88838901613da0565b93506060870135915080821115614382578283fd5b506142ac87828801613dfe565b600080604083850312156143a1578182fd5b82356143ac816157c7565b915060208301356001600160401b038111156143c6578182fd5b6142fb85828601613dfe565b6000806000606084860312156143e6578081fd5b83356143f1816157c7565b925060208401356001600160401b0381111561440b578182fd5b61441786828701613dfe565b925050604084013590509250925092565b6000806040838503121561443a578182fd5b8235614445816157c7565b946020939093013593505050565b600060208284031215614464578081fd5b81356001600160401b03811115614479578182fd5b6117ec84828501613b60565b600060208284031215614496578081fd5b81516001600160401b038111156144ab578182fd5b6117ec84828501613c8c565b6000806000606084860312156144cb578081fd5b83356001600160401b03808211156144e1578283fd5b6144ed87838801613ce7565b94506020860135915080821115614502578283fd5b61450e87838801613b60565b93506040860135915080821115614523578283fd5b5061453086828701613da0565b9150509250925092565b6000806040838503121561454c578182fd5b82356001600160401b0380821115614562578384fd5b61456e86838701613ce7565b93506020850135915080821115614583578283fd5b506142fb85828601613c31565b6000806000606084860312156145a4578081fd5b83516001600160401b03808211156145ba578283fd5b6145c687838801613c8c565b945060208601519150808211156145db578283fd5b6145e787838801613d42565b935060408601519150808211156145fc578283fd5b5061453086828701613bcc565b60008060006060848603121561461d578081fd5b83516001600160401b0380821115614633578283fd5b61463f87838801613c8c565b94506020860151935060408601519150808211156145fc578283fd5b6000806040838503121561466d578182fd5b82356001600160401b0380821115614683578384fd5b61456e86838701613da0565b600080604083850312156146a1578182fd5b82516001600160401b03808211156146b7578384fd5b6146c386838701613d42565b935060208501519150808211156146d8578283fd5b506142fb85828601613bcc565b6000602082840312156146f6578081fd5b81518015158114610c88578182fd5b6000806000806080858703121561471a578182fd5b84519350602085015161472c816157c7565b60408601519093506001600160401b038082111561427e578384fd5b6000806040838503121561475a578182fd5b505080516020909101519092909150565b6000806040838503121561477d578182fd5b8251915060208301516001600160401b03811115614799578182fd5b6142fb85828601613e4c565b6000806000606084860312156147b9578081fd5b8351925060208401516001600160401b03808211156147d6578283fd5b6147e287838801613e4c565b935060408601519150808211156147f7578283fd5b5061453086828701613e4c565b60008060408385031215614816578182fd5b82519150602083015161417d816157dc565b6000806040838503121561483a578182fd5b82516001600160e01b03198116811461416c578283fd5b600060208284031215614862578081fd5b81356001600160401b03811115614877578182fd5b6117ec84828501613dfe565b600060608284031215614894578081fd5b61489e6060615704565b6148a88484614122565b815260208301516020820152604083015160408201528091505092915050565b6000602082840312156148d9578081fd5b81516001600160401b038111156148ee578182fd5b6117ec84828501613fe0565b60008060006060848603121561490e578081fd5b83356001600160401b03811115614923578182fd5b61492f86828701613e92565b9350506020840135614940816157c7565b929592945050506040919091013590565b60008060408385031215614963578182fd5b82356001600160401b0380821115614979578384fd5b61498586838701613e92565b9350602085013591508082111561499a578283fd5b506142fb85828601613dfe565b6000806000606084860312156149bb578081fd5b83356001600160401b038111156149d0578182fd5b6149dc86828701613e92565b9350506020840135915060408401356149f4816157c7565b809150509250925092565b60008060008060808587031215614a14578182fd5b84516001600160401b0380821115614a2a578384fd5b614a3688838901613fe0565b95506020870151915080821115614a4b578384fd5b61426988838901613fe0565b600080600060608486031215614a6b578081fd5b83516001600160401b0380821115614a81578283fd5b614a8d87838801613fe0565b94506020860151935060408601519150808211156147f7578283fd5b600080600060608486031215614abd578081fd5b83356001600160401b0380821115614ad3578283fd5b81860160a08189031215614ae5578384fd5b614aef60a0615704565b9250803583526020810135602084015260408101356040840152614b168860608301613b4a565b6060840152608081013582811115614b2c578485fd5b614b3889828401613dfe565b608085015250919450505060208401359150614b578560408601613b4a565b90509250925092565b600060208284031215614b71578081fd5b5051919050565b60008060408385031215614b8a578182fd5b8251614b95816157dc565b6020939093015192949293505050565b600080600060608486031215614bb9578081fd5b8351614bc4816157dc565b6020850151604086015191945092506149f4816157c7565b60008060008060808587031215614bf1578182fd5b614bfb8686614122565b9350602085015192506040850151614c12816157c7565b60608601519092506001600160401b03811115614c2d578182fd5b6142ac87828801613e4c565b600080600060608486031215614c4d578081fd5b614c578585614122565b92506020840151915060408401516001600160401b03811115614c78578182fd5b61453086828701613e4c565b600080600060608486031215614c98578081fd5b614ca28585614122565b925060208401519150604084015190509250925092565b1515815260200190565b6000614ccf8383614ddc565b505060600190565b6001600160a01b03169052565b6000815180845260208401935060208301825b82811015614d1e5781516001600160a01b0316865260209586019590910190600101614cf7565b5093949350505050565b600081518084526020840180819550602083028101915060208501845b84811015614d73578284038852614d5d848351614db0565b6020988901989094509190910190600101614d45565b50919695505050505050565b6000815180845260208401935060208301825b82811015614d1e578151865260209586019590910190600101614d92565b60008151808452614dc881602086016020860161576c565b601f01601f19169290920160200192915050565b805160ff16825260208082015190830152604090810151910152565b60006101c0614e08848451614cd7565b6020830151614e1a6020860182614cd7565b506040830151614e2d6040860182614cd7565b506060830151614e406060860182614cd7565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e0850152610100808401518186015250610120808401518186015250610140808401518282870152614e9983870182614db0565b91505061016091508184015185820383870152614eb68282614db0565b925050506101808084015185830382870152614ed28382614db0565b9150506101a091508184015185820383870152614eef8282614db0565b9695505050505050565b60008251614f0b81846020870161576c565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0385168152608060208201819052600090614f8b90830186614d7f565b8281036040840152614f9d8186614d7f565b8381036060850152614faf8186614db0565b98975050505050505050565b6001600160a01b0384168152606060208201819052600090614fdf90830185614db0565b9050826040830152949350505050565b6001600160a01b038516815260806020820181905260009061501390830186614db0565b8281036040840152614f9d8186614db0565b6001600160a01b03929092168252602082015260400190565b6000608082526150516080830187614d28565b82810360208401526150638187614ce4565b83810360408501526150758187614ce4565b915050828103606084015261508a8185614d7f565b979650505050505050565b602080825282518282018190526000918401906040840190835b818110156150d7578351600581106150c357fe5b8352602093840193909201916001016150af565b509095945050505050565b600060608201606083528086516150f981846151f4565b9150602088019250835b8181101561512757615116838551614cc3565b602094909401939250600101615103565b5050838103602085015261513b8187614d7f565b915050828103604084015280845161515381846151f4565b9150602086019250835b8181101561518157615170838551614cb9565b60209490940193925060010161515d565b5090979650505050505050565b600060208252610c886020830184614d7f565b6000604082526151b46040830185614d7f565b82810360208401526151c68185614d28565b95945050505050565b6000604082526151e26040830185614d7f565b82810360208401526151c68185614d7f565b90815260200190565b8481526001600160a01b038416602082015260806040820181905260009061522790830185614db0565b828103606084015261508a8185614db0565b918252602082015260400190565b6000838252604060208301526117ec6040830184614db0565b6000848252606060208301526152796060830185614db0565b8281036040840152614eef8185614db0565b8281526040810161529b836157bd565b8260208301529392505050565b6001600160e01b031991909116815260200190565b6001600160e01b03199290921682526001600160a01b0316602082015260400190565b6001600160e01b0319861681526001600160a01b038516602082015260a06040820181905260009061531490830186614d7f565b82810360608401526153268186614d7f565b83810360808501526117888186614db0565b6001600160e01b0319851681526001600160a01b038416602082015260806040820181905260009061536c90830185614db0565b905082606083015295945050505050565b6001600160e01b03199390931683526001600160a01b03919091166020830152604082015260600190565b600063ffffffff60e01b85168252606060208301526153ca6060830185614d7f565b8281036040840152614eef8185614d28565b600060208252610c886020830184614db0565b6000608082526154026080830187614db0565b6001600160a01b03958616602084015293909416604082015260ff9190911660609091015292915050565b60006154388561579c565b848252836020830152606060408301526151c66060830184614db0565b60608101615462856157a9565b938152602081019290925260409091015290565b60608101615483856157b3565b93815260208101929092526001600160a01b031660409091015290565b604081016154ad846157a9565b9281526020015290565b60608101615462856157b3565b606081016008851061546257fe5b60208101600583106154e057fe5b91905290565b60006154f1866157bd565b858252602082018590526001600160a01b0384166040830152608060608301819052614eef90830184614db0565b604081016154ad8461579c565b60006080825261553f6080830187614db0565b602083820381850152818751808452828401915082838202850101838a01865b8381101561558d57601f1987840301855261557b838351614df8565b9486019492509085019060010161555f565b505086810360408801526155a1818a614d7f565b945050505050828103606084015261508a8185614d28565b602080825260139082015272554e4b4e4f574e5f52455455524e5f4441544160681b604082015260600190565b60208082526019908201527f554e4b4e4f574e5f46554e4354494f4e5f53454c4543544f5200000000000000604082015260600190565b6020808252600d908201526c15539253541311535153951151609a1b604082015260600190565b6020808252600c908201526b2120a22fa9a2a622a1aa27a960a11b604082015260600190565b6020808252600e908201526d15d493d391d7d41493d61657d25160921b604082015260600190565b60a081016156a08286614ddc565b8360608301528215156080830152949350505050565b600060208252610c886020830184614df8565b6000604082526156dc6040830185614df8565b82810360208401526151c68185614db0565b9283526020830191909152604082015260600190565b6040518181016001600160401b038111828210171561572257600080fd5b604052919050565b60006001600160401b0382111561573f578081fd5b5060209081020190565b60006001600160401b0382111561575e578081fd5b50601f01601f191660200190565b60005b8381101561578757818101518382015260200161576f565b83811115615796576000848401525b50505050565b600281106157a657fe5b50565b600481106157a657fe5b600381106157a657fe5b600781106157a657fe5b6001600160a01b03811681146157a657600080fd5b60ff811681146157a657600080fdfea365627a7a723158204793664dee66dcabc4a710b9901a17d347a2ff1fb84df266b96a650f614b87756c6578706572696d656e74616cf564736f6c634300050f0040" + "object": "0x60806040523480156200001157600080fd5b5060405162005c5338038062005c538339810160408190526200003491620003c5565b600080546001600160a01b0319166001600160a01b0383811691909117808355604051630c0e082160e31b8152839285928392839291909116906360704108906200008b90630f47261b60e41b90600401620003f5565b60206040518083038186803b158015620000a457600080fd5b505afa158015620000b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620000df9190810190620003c5565b600180546001600160a01b0319166001600160a01b03928316179055600054604051630c0e082160e31b81529116906360704108906200012b9063012b8bc960e11b90600401620003f5565b60206040518083038186803b1580156200014457600080fd5b505afa15801562000159573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506200017f9190810190620003c5565b600280546001600160a01b0319166001600160a01b03928316179055600054604051630c0e082160e31b8152911690636070410890620001cb9063a7cb5fb760e01b90600401620003f5565b60206040518083038186803b158015620001e457600080fd5b505afa158015620001f9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506200021f9190810190620003c5565b600380546001600160a01b0319166001600160a01b03928316179055600054604051630c0e082160e31b81529116906360704108906200026b9063619ce88560e11b90600401620003f5565b60206040518083038186803b1580156200028457600080fd5b505afa15801562000299573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620002bf9190810190620003c5565b600480546001600160a01b03199081166001600160a01b03938416179091556005805490911693821693909317909255506000915082161562000303578162000305565b305b9050620003606040518060400160405280600b81526020016a0c1e08141c9bdd1bd8dbdb60aa1b815250604051806040016040528060058152602001640332e302e360dc1b81525085846200036e60201b6200358a1760201c565b600655506200040a92505050565b8351602094850120835193850193909320604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f815295860194909452928401929092526060830152608082015260a0902090565b600060208284031215620003d7578081fd5b81516001600160a01b0381168114620003ee578182fd5b9392505050565b6001600160e01b031991909116815260200190565b615839806200041a6000396000f3fe608060405234801561001057600080fd5b50600436106102745760003560e01c80639a7e752611610151578063ca49f47c116100c3578063d3d862d111610087578063d3d862d1146106a9578063d4695028146106bc578063e25cabf7146106dc578063e4e6e7da146106fe578063e77286eb1461071f578063ee4f5a941461074157610274565b8063ca49f47c1461062c578063cafd3a071461064f578063d001c5dc14610670578063d186037f14610683578063d36379051461069657610274565b8063a6627e9f11610115578063a6627e9f14610598578063acaedc74146105ab578063b43cffe1146105ce578063bbb2dcf6146105e1578063bc03f96414610603578063c26cfecd1461062457610274565b80639a7e75261461050b5780639eadc8351461052e578063a070cac814610552578063a0901e5114610565578063a5cd62ba1461057857610274565b80634dfdac20116101ea5780637914b2ec116101ae5780637914b2ec146104705780637982653e1461049157806379c9c426146104b15780637b66ad34146104c45780637d727512146104e55780638f4ce479146104f857610274565b80634dfdac20146103d8578063590aa875146103f857806363eb399214610418578063651290421461042b5780636f83188e1461044d57610274565b8063314853ff1161023c578063314853ff14610328578063327d30541461034a57806332aae3ad1461035d5780633db6dc611461037f578063459be5e2146103a257806346eb65cb146103c357610274565b806302d0aec31461027957806304a5618a146102a35780630d7b7d76146102c5578063165979e1146102e65780632322cf7614610308575b600080fd5b61028c610287366004614853565b610763565b60405161029a929190615296565b60405180910390f35b6102b66102b1366004614853565b6107bf565b60405161029a93929190615388565b6102d86102d3366004614391565b61083a565b60405161029a929190615244565b6102f96102f4366004614853565b61085c565b60405161029a939291906154c2565b61031b610316366004614391565b6108b9565b60405161029a91906151ff565b61033b610336366004614853565b6108e1565b60405161029a9392919061526b565b6102d8610358366004614853565b610928565b61037061036b366004614853565b61096a565b60405161029a93929190615438565b61039261038d366004614853565b6109bd565b60405161029a9493929190615208565b6103b56103b0366004614853565b610a07565b60405161029a9291906154ab565b6103d66103d1366004614853565b610a5d565b005b6103eb6103e63660046142ba565b610b59565b60405161029a9190615199565b61040b610406366004614135565b610bdc565b60405161029a91906153e7565b61040b6104263660046143d4565b610c32565b61043e610439366004614853565b610c8f565b60405161029a93929190614f4e565b61046061045b366004614853565b610cc9565b60405161029a9493929190615537565b61048361047e366004614853565b6114d6565b60405161029a9291906152c8565b6104a461049f3660046148ff565b61150e565b60405161029a91906154dd565b61031b6104bf366004614aae565b611795565b6104d76104d2366004614853565b6117f4565b60405161029a929190614f34565b61031b6104f3366004614391565b61182c565b610483610506366004614853565b611daf565b61051e610519366004614853565b611e0c565b60405161029a94939291906154f1565b61054161053c366004614853565b611e6d565b60405161029a9594939291906152eb565b61031b6105603660046149ac565b611ee5565b6103eb610573366004614455565b611f3c565b61058b6105863660046144b9565b611fb5565b60405161029a91906150a0565b61040b6105a636600461442a565b612078565b6105be6105b9366004614853565b6120d1565b60405161029a9493929190614ffa565b61040b6105dc366004614307565b61210d565b6105f46105ef366004614853565b61216c565b60405161029a939291906153b3565b610616610611366004614853565b6121e6565b60405161029a929190615252565b61031b61221f565b61063f61063a366004614853565b612225565b60405161029a9493929190615343565b61066261065d366004614853565b6122a3565b60405161029a92919061552a565b6103eb61067e3660046142ba565b6122f1565b61031b610691366004614391565b61235f565b6104a46106a43660046148ff565b6127e9565b61040b6106b736600461465d565b612b49565b6106cf6106ca366004614853565b612b68565b60405161029a91906152b3565b6106ef6106ea36600461453c565b612c1d565b60405161029a939291906150ed565b61071161070c3660046142ba565b612d55565b60405161029a9291906151da565b61073261072d366004614956565b612d6e565b60405161029a9392919061569d565b61075461074f366004614853565b612fa6565b60405161029a93929190615481565b60008061077783610772612fe3565b612fee565b6000610790600485518661302e9092919063ffffffff16565b8060200190516107a39190810190614806565b909350905060ff811660068111156107b757fe5b915050915091565b600080806107d3848263ffffffff61307116565b92506001600160e01b0319831663012b8bc960e11b1461080e5760405162461bcd60e51b815260040161080590615675565b60405180910390fd5b61081f84601063ffffffff6130a516565b915061083284602463ffffffff6130d816565b929491935050565b600080610847848461182c565b9150610853848461235f565b90509250929050565b600080600061086d846107726130e4565b6000610886600486518761302e9092919063ffffffff16565b8060200190516108999190810190614c89565b9094509250905060ff811660028111156108af57fe5b9350509193909250565b60008060006108c8858561083a565b915091506108d682826130ef565b925050505b92915050565b60006060806108f284610772613105565b835161090890859060049063ffffffff61302e16565b80602001905161091b91908101906147a7565b9196909550909350915050565b60008061093783610772613110565b825161094d90849060049063ffffffff61302e16565b806020019051610960919081019061474a565b9094909350915050565b600080606061097b8461077261311b565b6000610994600486518761302e9092919063ffffffff16565b8060200190516109a79190810190614c3e565b9094509250905060ff811660018111156108af57fe5b6000806060806109cf85610772613126565b84516109e590869060049063ffffffff61302e16565b8060200190516109f89190810190614707565b92989197509550909350915050565b600080610a1683610772613131565b6000610a2f600485518661302e9092919063ffffffff16565b806020019051610a429190810190614b7d565b9250905060ff81166003811115610a5557fe5b925050915091565b6000610a6f828263ffffffff61307116565b90506001600160e01b03198116630f47261b60e41b1415610a9a57610a9382611daf565b5050610b55565b6001600160e01b0319811663012b8bc960e11b1415610ac457610abc826107bf565b505050610b55565b6001600160e01b0319811663a7cb5fb760e01b1415610af057610ae682611e6d565b5050505050610b55565b6001600160e01b031981166394cfcdd760e01b1415610b1257610abc8261216c565b6001600160e01b0319811663619ce88560e11b1415610b3d57610b3482612225565b50505050610b55565b60405162461bcd60e51b815260040161080590615675565b5050565b606060008251905080604051908082528060200260200182016040528015610b8b578160200160208202803883390190505b50915060005b818114610bd457610bb585858381518110610ba857fe5b602002602001015161235f565b838281518110610bc157fe5b6020908102919091010152600101610b91565b505092915050565b604051606090630f47261b60e41b90610bf9908490602401614f20565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050919050565b60405160609063619ce88560e11b90610c5390869086908690602401614fc6565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915290505b9392505050565b6000806000610ca08461077261313c565b8351610cb690859060049063ffffffff61302e16565b80602001905161091b919081019061418a565b60608080806000610ce0868263ffffffff61307116565b90506001600160e01b0319811663dedfc1f160e01b1415610d2c5760405180604001604052806011815260200170626174636843616e63656c4f726465727360781b81525094506110d8565b6001600160e01b03198116634b4a520160e11b1415610d74576040518060400160405280600f81526020016e626174636846696c6c4f726465727360881b81525094506110d8565b6001600160e01b031981166323aa37f960e21b1415610dc35760405180604001604052806016815260200175626174636846696c6c4f72646572734e6f5468726f7760501b81525094506110d8565b6001600160e01b03198116632fbb8b8560e21b1415610e115760405180604001604052806015815260200174626174636846696c6c4f724b696c6c4f726465727360581b81525094506110d8565b6001600160e01b03198116632da6298760e01b1415610e55576040518060400160405280600b81526020016a31b0b731b2b627b93232b960a91b81525094506110d8565b6001600160e01b03198116634da26aab60e11b1415610e9757604051806040016040528060098152602001683334b63627b93232b960b91b81525094506110d8565b6001600160e01b03198116633852d63160e21b1415610edf576040518060400160405280600f81526020016e3334b63627b925b4b63627b93232b960891b81525094506110d8565b6001600160e01b031981166378d29ac160e01b1415610f2e57604051806040016040528060168152602001756d61726b65744275794f72646572734e6f5468726f7760501b81525094506110d8565b6001600160e01b0319811663369da09960e01b1415610f84576040518060400160405280601781526020017f6d61726b657453656c6c4f72646572734e6f5468726f7700000000000000000081525094506110d8565b6001600160e01b03198116638bc8efb360e01b1415610fda576040518060400160405280601981526020017f6d61726b65744275794f726465727346696c6c4f724b696c6c0000000000000081525094506110d8565b6001600160e01b0319811663a6c3bf3360e01b1415611030576040518060400160405280601a81526020017f6d61726b657453656c6c4f726465727346696c6c4f724b696c6c00000000000081525094506110d8565b6001600160e01b031981166388ec79fb60e01b1415611074576040518060400160405280600b81526020016a6d617463684f726465727360a81b81525094506110d8565b6001600160e01b03198116634f9559b160e01b14806110a357506001600160e01b031981166302280c9160e41b145b156110c05760405162461bcd60e51b815260040161080590615628565b60405162461bcd60e51b8152600401610805906155f1565b6001600160e01b0319811663dedfc1f160e01b141561116457855161110790879060049063ffffffff61314716565b80602001905161111a9190810190614487565b604080516000808252602082019092529195505b506040805160008082526020820190925291945061115c565b60608152602001906001900390816111475790505b5091506114ce565b6001600160e01b03198116632fbb8b8560e21b148061119357506001600160e01b03198116634b4a520160e11b145b806111ae57506001600160e01b031981166323aa37f960e21b145b156111c8576111bc866131c7565b919550935091506114ce565b6001600160e01b03198116632da6298760e01b14156112975760408051600180825281830190925290816020015b6111fe613a68565b8152602001906001900390816111f6575050865190945061122990879060049063ffffffff61314716565b80602001905161123c91908101906148cd565b8460008151811061124957fe5b6020026020010181905250600060405190808252806020026020018201604052801561112e57816020016020820280388339019050506040805160008082526020820190925291945061115c565b6001600160e01b03198116633852d63160e21b14806112c657506001600160e01b03198116634da26aab60e11b145b156112d4576111bc866131f6565b6001600160e01b031981166378d29ac160e01b148061130357506001600160e01b0319811663369da09960e01b145b8061131e57506001600160e01b03198116638bc8efb360e01b145b8061133957506001600160e01b0319811663a6c3bf3360e01b145b15611347576111bc866132f0565b6001600160e01b031981166388ec79fb60e01b14156114ce57611368613a68565b611370613a68565b60608061138a60048b518c6131479092919063ffffffff16565b80602001905161139d9190810190614a04565b604080516002808252606082019092529498509296509094509250816020015b6113c5613a68565b8152602001906001900390816113bd57905050975083886000815181106113e857fe5b6020026020010181905250828860018151811061140157fe5b602090810291909101015260408051600280825260608201909252908160200160208202803883390190505096508360a001518760008151811061144157fe5b6020026020010181815250508260a001518760018151811061145f57fe5b60209081029190910101526040805160028082526060820190925290816020015b606081526020019060019003908161148057905050955081866000815181106114a557fe5b602002602001018190525080866001815181106114be57fe5b6020026020010181905250505050505b509193509193565b6000806114e583610772613364565b82516114fb90849060049063ffffffff61302e16565b806020019051610960919081019061482a565b6000611518613afb565b6115a98584600560009054906101000a90046001600160a01b03166001600160a01b0316631ce4c78b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561156b57600080fd5b505afa15801561157f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115a39190810190614b65565b3a61336e565b60408051600280825260608281019093529293509091816020015b60608152602001906001900390816115c457505060408051600280825260608083018452939450909160208301908038833950506040805160028082526060808301845294955090925090602083019080388339505060408051600280825260608083018452949550909250906020830190803883390190505090508861014001518460008151811061165357fe5b602002602001018190525088600001518360008151811061167057fe5b60200260200101906001600160a01b031690816001600160a01b031681525050878260008151811061169e57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508460000151816000815181106116d057fe5b602002602001018181525050886101800151846001815181106116ef57fe5b602002602001018190525088600001518360018151811061170c57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505088604001518260018151811061173e57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505084604001518160018151811061177057fe5b602002602001018181525050611788848484846133e5565b9998505050505050505050565b60006117ec846117e76040518060400160405280600b81526020016a0c1e08141c9bdd1bd8dbdb60aa1b815250604051806040016040528060058152602001640332e302e360dc1b815250878761358a565b6135e1565b949350505050565b600080611803836107726135f5565b825161181990849060049063ffffffff61302e16565b8060200190516109609190810190614151565b60008061183f838263ffffffff61307116565b90506001600160e01b03198116630f47261b60e41b141561195857600061186d84601063ffffffff6130a516565b6040519091506060906370a0823160e01b9061188d908890602401614f20565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060836001600160a01b0316836040516118de9190614f04565b600060405180830381855afa9150503d8060008114611919576040519150601f19603f3d011682016040523d82523d6000602084013e61191e565b606091505b5091509150818015611931575080516020145b61193c57600061194d565b61194d81600063ffffffff6130d816565b955050505050611da8565b6001600160e01b0319811663012b8bc960e11b1415611a975760008061197d856107bf565b6040519194509250606091506331a9108f60e11b906119a09084906024016151ff565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060846001600160a01b0316836040516119f19190614f04565b600060405180830381855afa9150503d8060008114611a2c576040519150601f19603f3d011682016040523d82523d6000602084013e611a31565b606091505b50915091506000828015611a46575081516020145b611a51576000611a62565b611a6282600c63ffffffff6130a516565b9050896001600160a01b0316816001600160a01b031614611a84576000611a87565b60015b60ff169750505050505050611da8565b6001600160e01b0319811663a7cb5fb760e01b1415611c1e576000606080611abe86611e6d565b5081519296509094509250905060005b818114611c14578351606090627eeac760e11b908b90879085908110611af057fe5b6020026020010151604051602401611b09929190615030565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060876001600160a01b031683604051611b5a9190614f04565b600060405180830381855afa9150503d8060008114611b95576040519150601f19603f3d011682016040523d82523d6000602084013e611b9a565b606091505b50915091506000828015611baf575081516020145b611bba576000611bcb565b611bcb82600063ffffffff6130d816565b90506000878681518110611bdb57fe5b60200260200101518281611beb57fe5b0490508b811080611bfa57508b155b15611c0357809b505b505060019093019250611ace915050565b5050505050611da8565b6001600160e01b0319811663619ce88560e11b1415611d0a57604051606090632a17967960e21b90611c5b908690600090819081906024016153fa565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925260045491519092506000916001600160a01b031690611cad908490614f04565b600060405180830381855afa9150503d8060008114611ce8576040519150601f19603f3d011682016040523d82523d6000602084013e611ced565b606091505b5050905080611cfd576000611d01565b6000195b93505050611da8565b6001600160e01b031981166394cfcdd760e01b1415611da857606080611d2f8561216c565b80519194509250905060005b818114611da3576000611d6189858481518110611d5457fe5b602002602001015161182c565b90506000858381518110611d7157fe5b60200260200101518281611d8157fe5b04905087811080611d90575087155b15611d99578097505b5050600101611d3b565b505050505b5092915050565b600080611dc2838263ffffffff61307116565b91506001600160e01b03198216630f47261b60e41b14611df45760405162461bcd60e51b815260040161080590615675565b611e0583601063ffffffff6130a516565b9050915091565b60008060006060611e1f85610772613600565b6000611e38600487518861302e9092919063ffffffff16565b806020019051611e4b9190810190614be1565b91965094509250905060ff81166006811115611e6357fe5b9450509193509193565b60008060608080611e84868563ffffffff61307116565b94506001600160e01b0319851663a7cb5fb760e01b14611eb65760405162461bcd60e51b815260040161080590615675565b505050506024828101516044840151606485015160848601519496929591820184019490820184019391010190565b60006117ec84611f376040518060400160405280600b81526020016a0c1e08141c9bdd1bd8dbdb60aa1b815250604051806040016040528060058152602001640332e302e360dc1b815250878761358a565b61360b565b6060808251604051908082528060200260200182016040528015611f6a578160200160208202803883390190505b50905060005b83518114611da857838181518110611f8457fe5b60200260200101516001600160a01b031631828281518110611fa257fe5b6020908102919091010152600101611f70565b606060008451905080604051908082528060200260200182016040528015611fe7578160200160208202803883390190505b50915060005b81811461206f5761203886828151811061200357fe5b602002602001015186838151811061201757fe5b602002602001015186848151811061202b57fe5b60200260200101516127e9565b83828151811061204457fe5b6020026020010190600481111561205757fe5b9081600481111561206457fe5b905250600101611fed565b50509392505050565b60405160609063012b8bc960e11b906120979085908590602401615030565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905092915050565b600060608060606120e48561077261361a565b84516120fa90869060049063ffffffff61302e16565b8060200190516109f89190810190614223565b60405160609063a7cb5fb760e01b90612130908790879087908790602401614f72565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050949350505050565b6000606080612181848463ffffffff61307116565b92506001600160e01b031983166394cfcdd760e01b146121b35760405162461bcd60e51b815260040161080590615675565b83516121c990859060049063ffffffff61314716565b8060200190516121dc9190810190614691565b9395909450915050565b600060606121f683610772613625565b825161220c90849060049063ffffffff61302e16565b806020019051610960919081019061476d565b60065481565b60008060608161223b858263ffffffff61307116565b93506001600160e01b0319841663619ce88560e11b1461226d5760405162461bcd60e51b815260040161080590615675565b845161228390869060049063ffffffff61314716565b80602001905161229691908101906141cc565b9597919650949350915050565b6000806122b283610772613630565b60006122cb600485518661302e9092919063ffffffff16565b8060200190516122de9190810190614b7d565b9250905060ff81166001811115610a5557fe5b606060008251905080604051908082528060200260200182016040528015612323578160200160208202803883390190505b50915060005b818114610bd45761234085858381518110611d5457fe5b83828151811061234c57fe5b6020908102919091010152600101612329565b600080612372838263ffffffff61307116565b90506001600160e01b031981166394cfcdd760e01b141561240b576060806123998561216c565b80519194509250905060005b8181146124005760006123be89858481518110610ba857fe5b905060008583815181106123ce57fe5b602002602001015182816123de57fe5b049050878110806123ed575087155b156123f6578097505b50506001016123a5565b506108db9350505050565b6001600160e01b03198116630f47261b60e41b141561246457600061243784601063ffffffff6130a516565b600154604051919250606091636eb1769f60e11b9161188d9189916001600160a01b031690602401614f34565b6001600160e01b0319811663012b8bc960e11b141561269757600080612489856107bf565b6002546040519295509093506060925063e985e9c560e01b916124bc918a916001600160a01b0390911690602401614f34565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060846001600160a01b03168360405161250d9190614f04565b600060405180830381855afa9150503d8060008114612548576040519150601f19603f3d011682016040523d82523d6000602084013e61254d565b606091505b509150915081158061256157508051602014155b8061257d575061257881600063ffffffff6130d816565b600114155b156126885760405160609063020604bf60e21b9061259f9087906024016151ff565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050856001600160a01b0316816040516125ec9190614f04565b600060405180830381855afa9150503d8060008114612627576040519150601f19603f3d011682016040523d82523d6000602084013e61262c565b606091505b509093509150828015612640575081516020145b801561266f57506002546001600160a01b031661266483600c63ffffffff6130a516565b6001600160a01b0316145b61267a57600061267d565b60015b60ff16975050611c14565b60001996505050505050611da8565b6001600160e01b0319811663a7cb5fb760e01b14156127c55760006126bb84611e6d565b50506003546040519294506060935063e985e9c560e01b926126ec925089916001600160a01b031690602401614f34565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060836001600160a01b03168360405161273d9190614f04565b600060405180830381855afa9150503d8060008114612778576040519150601f19603f3d011682016040523d82523d6000602084013e61277d565b606091505b5091509150818015612790575080516020145b80156127ac57506127a881600063ffffffff6130d816565b6001145b6127b757600061194d565b600019955050505050611da8565b6001600160e01b0319811663619ce88560e11b1415611da857506000199392505050565b60006127f3613afb565b6128468584600560009054906101000a90046001600160a01b03166001600160a01b0316631ce4c78b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561156b57600080fd5b60408051600480825260a0820190925291925060609190816020015b606081526020019060019003908161286257505060408051600480825260a082019092529192506060919060208201608080388339505060408051600480825260a08201909252929350606092915060208201608080388339505060408051600480825260a08201909252929350606092915060208201608080388339019050509050886101600151846000815181106128f857fe5b6020026020010181905250878360008151811061291157fe5b60200260200101906001600160a01b031690816001600160a01b03168152505088600001518260008151811061294357fe5b60200260200101906001600160a01b031690816001600160a01b031681525050868160008151811061297157fe5b6020026020010181815250508861014001518460018151811061299057fe5b60200260200101819052508860000151836001815181106129ad57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505087826001815181106129db57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050846000015181600181518110612a0d57fe5b602002602001018181525050886101a0015184600281518110612a2c57fe5b60200260200101819052508783600281518110612a4557fe5b60200260200101906001600160a01b031690816001600160a01b031681525050886040015182600281518110612a7757fe5b60200260200101906001600160a01b031690816001600160a01b031681525050846060015181600281518110612aa957fe5b60200260200101818152505088610180015184600381518110612ac857fe5b6020026020010181905250886000015183600381518110612ae557fe5b60200260200101906001600160a01b031690816001600160a01b031681525050886040015182600381518110612b1757fe5b60200260200101906001600160a01b031690816001600160a01b03168152505084604001518160038151811061177057fe5b6040516060906394cfcdd760e01b9061209790859085906024016151ac565b6000612b7a828263ffffffff61307116565b90506001600160e01b03198116630f47261b60e41b1480612bab57506001600160e01b0319811663012b8bc960e11b145b80612bc657506001600160e01b0319811663a7cb5fb760e01b145b80612be157506001600160e01b031981166394cfcdd760e01b145b80612bfc57506001600160e01b0319811663619ce88560e11b145b612c185760405162461bcd60e51b815260040161080590615675565b919050565b606080606060008551905080604051908082528060200260200182016040528015612c6257816020015b612c4f613b2a565b815260200190600190039081612c475790505b50935080604051908082528060200260200182016040528015612c8f578160200160208202803883390190505b50925080604051908082528060200260200182016040528015612cbc578160200160208202803883390190505b50915060005b818114612d4c57612cf9878281518110612cd857fe5b6020026020010151878381518110612cec57fe5b6020026020010151612d6e565b8751889085908110612d0757fe5b60200260200101878581518110612d1a57fe5b60200260200101878681518110612d2d57fe5b9315156020948502919091019093019290925291905252600101612cc2565b50509250925092565b606080612d6284846122f1565b91506108538484610b59565b612d76613b2a565b600554604051639d3fa4b960e01b815260009182916001600160a01b0390911690639d3fa4b990612dab9088906004016156c1565b60606040518083038186803b158015612dc357600080fd5b505afa158015612dd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612dfb9190810190614885565b855160055460405163a12dcc6f60e01b815292955090916001600160a01b039091169063a12dcc6f90612e3490899089906004016156d4565b60206040518083038186803b158015612e4c57600080fd5b505afa158015612e60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612e8491908101906146e7565b91506000612e97828861014001516108b9565b60a088015160c08901516101808a01516101408b015193945091929091600091612ec69163ffffffff61363b16565b15612ef357612eec84612ee6848d6080015161366090919063ffffffff16565b8561367c565b9050612f4c565b81612f0757612eec848b608001518561367c565b6000612f18868c61018001516108b9565b90506000612f2b868d608001518761367c565b90506000612f3a83868861367c565b9050612f4682826130ef565b93505050505b612f6c612f6689604001518561369e90919063ffffffff16565b826130ef565b96506004612f7f8b8c602001518a61150e565b6004811115612f8a57fe5b14612f96576000612f98565b865b965050505050509250925092565b6000806000612fb7846107726136bd565b6000612fd0600486518761302e9092919063ffffffff16565b8060200190516108999190810190614baa565b63fdb6ca8d60e01b90565b6000612ffb836000613071565b90506001600160e01b0319808216908316146130295760405162461bcd60e51b81526004016108059061564f565b505050565b60608183111561304c5761304c613047600085856136c8565b6136e7565b83518211156130655761306561304760018487516136c8565b50819003910190815290565b600081600401835110156130925761309261304760038551856004016136c8565b5001602001516001600160e01b03191690565b600081601401835110156130c6576130c661304760048551856014016136c8565b5001601401516001600160a01b031690565b6000610c8883836136ef565b6318e4b14160e01b90565b60008183106130fe5781610c88565b5090919050565b634678472b60e01b90565b63b6555d6f60e01b90565b6324410cd360e11b90565b631b8388f760e01b90565b630e94a7ed60e41b90565b634ad3127560e01b90565b60608183111561316057613160613047600085856136c8565b83518211156131795761317961304760018487516136c8565b8282036040519080825280601f01601f1916602001820160405280156131a6576020820181803883390190505b509050610c886131b582613719565b846131bf87613719565b01835161371f565b60608060606131e360048551866131479092919063ffffffff16565b80602001905161091b9190810190614592565b60408051600180825281830190925260609182918291816020015b613219613a68565b8152602001906001900390816132115750506040805160018082528183019092529194506020808301908038833901905050604080516001808252818301909252919350816020015b6060815260200190600190039081613262575050845190915061328f90859060049063ffffffff61314716565b8060200190516132a29190810190614a5c565b856000815181106132af57fe5b60200260200101856000815181106132c357fe5b60200260200101856000815181106132d757fe5b6020908102919091010192909252919052529193909250565b60408051600180825281830190925260609182918291602080830190803883395050855191935061332c9186915060049063ffffffff61314716565b80602001905161333f919081019061460b565b8451859060009061334c57fe5b60209081029190910101919091529095929450925050565b628e3db960e51b90565b613376613afb565b6020810184905260a085015160808601516133929186916137c4565b815260a085015160c08601516133a99186916137c4565b604082015260a085015160e08601516133c39186916137c4565b60608201526133d8828463ffffffff6137f816565b6080820152949350505050565b60405160009060609063b04fbddd60e01b9061340b908890889088908890602401615049565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925260055491519092506060916001600160a01b03169061345d908490614f04565b6000604051808303816000865af19150503d806000811461349a576040519150601f19603f3d011682016040523d82523d6000602084013e61349f565b606091505b509150600090506134b6828263ffffffff61307116565b90506134c061311b565b6001600160e01b0319828116911614156134fd5760006134df8361096a565b5091505060ff811660048111156134f257fe5b9450505050506117ec565b613505613105565b6001600160e01b031982811691161415613538576000613524836108e1565b509091505060ff811660048111156134f257fe5b815160208301207ff43f26ea5a94b478394a975e856464913dc1a8a1ca70939d974aa7c238aa0ce0141561357257600493505050506117ec565b60405162461bcd60e51b8152600401610805906155c4565b8351602094850120835193850193909320604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f815295860194909452928401929092526060830152608082015260a0902090565b6000610c88826135f085613829565b6138a4565b6350ae068360e11b90565b630fcb446360e31b90565b6000610c88826135f0856138c3565b635bd0428d60e01b90565b6320d11f6160e01b90565b633d66146160e21b90565b600081518351148015610c885750508051602091820120825192909101919091201490565b600082820183811015610c8857610c886130476000868661397c565b60006117ec83613692868563ffffffff6137f816565b9063ffffffff61399b16565b6000828211156136b7576136b76130476002858561397c565b50900390565b631ca78ed960e31b90565b6060632800659560e01b848484604051602401610c53939291906154cf565b805160208201fd5b600081602001835110156137105761371061304760058551856020016136c8565b50016020015190565b60200190565b6020811015613749576001816020036101000a038019835116818551168082178652505050613029565b8282141561375657613029565b828211156137905760208103905080820181840181515b8285101561378857845186526020958601959094019361376d565b905250613029565b60208103905080820181840183515b818612156137bb5782518252601f19928301929091019061379f565b85525050505050565b60006137d18484846139c5565b156137e4576137e4613047858585613a2b565b6117ec83613692868563ffffffff6137f816565b600082613807575060006108db565b8282028284828161381457fe5b0414610c8857610c886130476001868661397c565b608081810151825160208085015160408087015160609788015186519685019690962082517fec69816980a3a3ca4554410e60253953e9ff375ba4536a98adfa15cc7154150881529485019590955290830191909152948101949094526001600160a01b039091169183019190915260a082015260c0902090565b60405161190160f01b8152600281019290925260228201526042902090565b6101408101516101608201516101808301516101a08401516000937ff80322eb8376aafb64eadf8f0d7623f22130fd9491a221e902b713cb984a75349390929091602087101561390f57fe5b601f1987018051610140890180516101608b0180516101808d0180516101a08f0180519d89528c5160209d8e012087528b519b8d019b909b2084528951998c01999099208152875197909a019690962088526101e085209390945290529190529252919091529050919050565b606063e946c1bb60e01b848484604051602401610c5393929190615460565b6000816139b1576139b16130476003858561397c565b60008284816139bc57fe5b04949350505050565b6000826139d7576139d7613047613a4a565b8115806139e2575083155b156139ef57506000610c88565b600083806139f957fe5b8584099050613a0e858463ffffffff6137f816565b613a20826103e863ffffffff6137f816565b101595945050505050565b606063339f3de260e01b848484604051602401610c53939291906156f9565b60408051808201909152600481526329e460df60e21b602082015290565b604051806101c0016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001606081525090565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6040805160608101909152806000815260006020820181905260409091015290565b80356108db816157d2565b80516108db816157d2565b600082601f830112613b72578081fd5b8135613b85613b8082615735565b61570f565b818152915060208083019084810181840286018201871015613ba657600080fd5b60005b84811015611da3578135613bbc816157d2565b84529282019290820190600101613ba9565b600082601f830112613bde578081fd5b8151613bec613b8082615735565b8181529150602080830190840160005b83811015613c2957613c148760208451890101613e4e565b83526020928301929190910190600101613bfc565b5050505092915050565b600082601f830112613c43578081fd5b8135613c51613b8082615735565b8181529150602080830190840160005b83811015613c2957613c798760208435890101613e00565b83526020928301929190910190600101613c61565b600082601f830112613c9e578081fd5b8151613cac613b8082615735565b8181529150602080830190840160005b83811015613c2957613cd48760208451890101613fe2565b83526020928301929190910190600101613cbc565b600082601f830112613cf9578081fd5b8135613d07613b8082615735565b8181529150602080830190840160005b83811015613c2957613d2f8760208435890101613e94565b83526020928301929190910190600101613d17565b600082601f830112613d54578081fd5b8151613d62613b8082615735565b818152915060208083019084810181840286018201871015613d8357600080fd5b60005b84811015611da357815184529282019290820190600101613d86565b600082601f830112613db2578081fd5b8135613dc0613b8082615735565b818152915060208083019084810181840286018201871015613de157600080fd5b60005b84811015611da357813584529282019290820190600101613de4565b600082601f830112613e10578081fd5b8135613e1e613b8082615754565b9150808252836020828501011115613e3557600080fd5b8060208401602084013760009082016020015292915050565b600082601f830112613e5e578081fd5b8151613e6c613b8082615754565b9150808252836020828501011115613e8357600080fd5b611da8816020840160208601615777565b60006101c0808385031215613ea7578182fd5b613eb08161570f565b915050613ebd8383613b4c565b8152613ecc8360208401613b4c565b6020820152613ede8360408401613b4c565b6040820152613ef08360608401613b4c565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e0820152610100808301358183015250610120808301358183015250610140808301356001600160401b0380821115613f5157600080fd5b613f5d86838701613e00565b83850152610160925082850135915080821115613f7957600080fd5b613f8586838701613e00565b83850152610180925082850135915080821115613fa157600080fd5b613fad86838701613e00565b838501526101a0925082850135915080821115613fc957600080fd5b50613fd685828601613e00565b82840152505092915050565b60006101c0808385031215613ff5578182fd5b613ffe8161570f565b91505061400b8383613b57565b815261401a8360208401613b57565b602082015261402c8360408401613b57565b604082015261403e8360608401613b57565b60608201526080820151608082015260a082015160a082015260c082015160c082015260e082015160e0820152610100808301518183015250610120808301518183015250610140808301516001600160401b038082111561409f57600080fd5b6140ab86838701613e4e565b838501526101609250828501519150808211156140c757600080fd5b6140d386838701613e4e565b838501526101809250828501519150808211156140ef57600080fd5b6140fb86838701613e4e565b838501526101a092508285015191508082111561411757600080fd5b50613fd685828601613e4e565b805160ff811681146108db57600080fd5b600060208284031215614146578081fd5b8135610c88816157d2565b60008060408385031215614163578081fd5b825161416e816157d2565b602084015190925061417f816157d2565b809150509250929050565b60008060006060848603121561419e578081fd5b83516141a9816157d2565b60208501519093506141ba816157d2565b80925050604084015190509250925092565b6000806000606084860312156141e0578081fd5b83516141eb816157d2565b60208501519093506001600160401b03811115614206578182fd5b61421286828701613e4e565b925050604084015190509250925092565b60008060008060808587031215614238578182fd5b8451614243816157d2565b60208601519094506001600160401b038082111561425f578384fd5b61426b88838901613e4e565b94506040870151915080821115614280578384fd5b61428c88838901613e4e565b935060608701519150808211156142a1578283fd5b506142ae87828801613e4e565b91505092959194509250565b600080604083850312156142cc578182fd5b82356142d7816157d2565b915060208301356001600160401b038111156142f1578182fd5b6142fd85828601613c33565b9150509250929050565b6000806000806080858703121561431c578182fd5b8435614327816157d2565b935060208501356001600160401b0380821115614342578384fd5b61434e88838901613da2565b94506040870135915080821115614363578384fd5b61436f88838901613da2565b93506060870135915080821115614384578283fd5b506142ae87828801613e00565b600080604083850312156143a3578182fd5b82356143ae816157d2565b915060208301356001600160401b038111156143c8578182fd5b6142fd85828601613e00565b6000806000606084860312156143e8578081fd5b83356143f3816157d2565b925060208401356001600160401b0381111561440d578182fd5b61441986828701613e00565b925050604084013590509250925092565b6000806040838503121561443c578182fd5b8235614447816157d2565b946020939093013593505050565b600060208284031215614466578081fd5b81356001600160401b0381111561447b578182fd5b6117ec84828501613b62565b600060208284031215614498578081fd5b81516001600160401b038111156144ad578182fd5b6117ec84828501613c8e565b6000806000606084860312156144cd578081fd5b83356001600160401b03808211156144e3578283fd5b6144ef87838801613ce9565b94506020860135915080821115614504578283fd5b61451087838801613b62565b93506040860135915080821115614525578283fd5b5061453286828701613da2565b9150509250925092565b6000806040838503121561454e578182fd5b82356001600160401b0380821115614564578384fd5b61457086838701613ce9565b93506020850135915080821115614585578283fd5b506142fd85828601613c33565b6000806000606084860312156145a6578081fd5b83516001600160401b03808211156145bc578283fd5b6145c887838801613c8e565b945060208601519150808211156145dd578283fd5b6145e987838801613d44565b935060408601519150808211156145fe578283fd5b5061453286828701613bce565b60008060006060848603121561461f578081fd5b83516001600160401b0380821115614635578283fd5b61464187838801613c8e565b94506020860151935060408601519150808211156145fe578283fd5b6000806040838503121561466f578182fd5b82356001600160401b0380821115614685578384fd5b61457086838701613da2565b600080604083850312156146a3578182fd5b82516001600160401b03808211156146b9578384fd5b6146c586838701613d44565b935060208501519150808211156146da578283fd5b506142fd85828601613bce565b6000602082840312156146f8578081fd5b81518015158114610c88578182fd5b6000806000806080858703121561471c578182fd5b84519350602085015161472e816157d2565b60408601519093506001600160401b0380821115614280578384fd5b6000806040838503121561475c578182fd5b505080516020909101519092909150565b6000806040838503121561477f578182fd5b8251915060208301516001600160401b0381111561479b578182fd5b6142fd85828601613e4e565b6000806000606084860312156147bb578081fd5b8351925060208401516001600160401b03808211156147d8578283fd5b6147e487838801613e4e565b935060408601519150808211156147f9578283fd5b5061453286828701613e4e565b60008060408385031215614818578182fd5b82519150602083015161417f816157e7565b6000806040838503121561483c578182fd5b82516001600160e01b03198116811461416e578283fd5b600060208284031215614864578081fd5b81356001600160401b03811115614879578182fd5b6117ec84828501613e00565b600060608284031215614896578081fd5b6148a0606061570f565b8251600781106148ae578283fd5b8152602083810151908201526040928301519281019290925250919050565b6000602082840312156148de578081fd5b81516001600160401b038111156148f3578182fd5b6117ec84828501613fe2565b600080600060608486031215614913578081fd5b83356001600160401b03811115614928578182fd5b61493486828701613e94565b9350506020840135614945816157d2565b929592945050506040919091013590565b60008060408385031215614968578182fd5b82356001600160401b038082111561497e578384fd5b61498a86838701613e94565b9350602085013591508082111561499f578283fd5b506142fd85828601613e00565b6000806000606084860312156149c0578081fd5b83356001600160401b038111156149d5578182fd5b6149e186828701613e94565b9350506020840135915060408401356149f9816157d2565b809150509250925092565b60008060008060808587031215614a19578182fd5b84516001600160401b0380821115614a2f578384fd5b614a3b88838901613fe2565b95506020870151915080821115614a50578384fd5b61426b88838901613fe2565b600080600060608486031215614a70578081fd5b83516001600160401b0380821115614a86578283fd5b614a9287838801613fe2565b94506020860151935060408601519150808211156147f9578283fd5b600080600060608486031215614ac2578081fd5b83356001600160401b0380821115614ad8578283fd5b81860160a08189031215614aea578384fd5b614af460a061570f565b9250803583526020810135602084015260408101356040840152614b1b8860608301613b4c565b6060840152608081013582811115614b31578485fd5b614b3d89828401613e00565b608085015250919450505060208401359150614b5c8560408601613b4c565b90509250925092565b600060208284031215614b76578081fd5b5051919050565b60008060408385031215614b8f578182fd5b8251614b9a816157e7565b6020939093015192949293505050565b600080600060608486031215614bbe578081fd5b8351614bc9816157e7565b6020850151604086015191945092506149f9816157d2565b60008060008060808587031215614bf6578182fd5b614c008686614124565b9350602085015192506040850151614c17816157d2565b60608601519092506001600160401b03811115614c32578182fd5b6142ae87828801613e4e565b600080600060608486031215614c52578081fd5b614c5c8585614124565b92506020840151915060408401516001600160401b03811115614c7d578182fd5b61453286828701613e4e565b600080600060608486031215614c9d578081fd5b614ca78585614124565b925060208401519150604084015190509250925092565b1515815260200190565b6000614cd48383614de1565b505060600190565b6001600160a01b03169052565b6000815180845260208401935060208301825b82811015614d235781516001600160a01b0316865260209586019590910190600101614cfc565b5093949350505050565b600081518084526020840180819550602083028101915060208501845b84811015614d78578284038852614d62848351614db5565b6020988901989094509190910190600101614d4a565b50919695505050505050565b6000815180845260208401935060208301825b82811015614d23578151865260209586019590910190600101614d97565b60008151808452614dcd816020860160208601615777565b601f01601f19169290920160200192915050565b8051614dec816157c8565b825260208181015190830152604090810151910152565b60006101c0614e13848451614cdc565b6020830151614e256020860182614cdc565b506040830151614e386040860182614cdc565b506060830151614e4b6060860182614cdc565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e0850152610100808401518186015250610120808401518186015250610140808401518282870152614ea483870182614db5565b91505061016091508184015185820383870152614ec18282614db5565b925050506101808084015185830382870152614edd8382614db5565b9150506101a091508184015185820383870152614efa8282614db5565b9695505050505050565b60008251614f16818460208701615777565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0385168152608060208201819052600090614f9690830186614d84565b8281036040840152614fa88186614d84565b8381036060850152614fba8186614db5565b98975050505050505050565b6001600160a01b0384168152606060208201819052600090614fea90830185614db5565b9050826040830152949350505050565b6001600160a01b038516815260806020820181905260009061501e90830186614db5565b8281036040840152614fa88186614db5565b6001600160a01b03929092168252602082015260400190565b60006080825261505c6080830187614d2d565b828103602084015261506e8187614ce9565b83810360408501526150808187614ce9565b91505082810360608401526150958185614d84565b979650505050505050565b602080825282518282018190526000918401906040840190835b818110156150e2578351600581106150ce57fe5b8352602093840193909201916001016150ba565b509095945050505050565b6000606082016060835280865161510481846151ff565b9150602088019250835b8181101561513257615121838551614cc8565b60209490940193925060010161510e565b505083810360208501526151468187614d84565b915050828103604084015280845161515e81846151ff565b9150602086019250835b8181101561518c5761517b838551614cbe565b602094909401939250600101615168565b5090979650505050505050565b600060208252610c886020830184614d84565b6000604082526151bf6040830185614d84565b82810360208401526151d18185614d2d565b95945050505050565b6000604082526151ed6040830185614d84565b82810360208401526151d18185614d84565b90815260200190565b8481526001600160a01b038416602082015260806040820181905260009061523290830185614db5565b82810360608401526150958185614db5565b918252602082015260400190565b6000838252604060208301526117ec6040830184614db5565b6000848252606060208301526152846060830185614db5565b8281036040840152614efa8185614db5565b828152604081016152a6836157c8565b8260208301529392505050565b6001600160e01b031991909116815260200190565b6001600160e01b03199290921682526001600160a01b0316602082015260400190565b6001600160e01b0319861681526001600160a01b038516602082015260a06040820181905260009061531f90830186614d84565b82810360608401526153318186614d84565b83810360808501526117888186614db5565b6001600160e01b0319851681526001600160a01b038416602082015260806040820181905260009061537790830185614db5565b905082606083015295945050505050565b6001600160e01b03199390931683526001600160a01b03919091166020830152604082015260600190565b600063ffffffff60e01b85168252606060208301526153d56060830185614d84565b8281036040840152614efa8185614d2d565b600060208252610c886020830184614db5565b60006080825261540d6080830187614db5565b6001600160a01b03958616602084015293909416604082015260ff9190911660609091015292915050565b6000615443856157a7565b848252836020830152606060408301526151d16060830184614db5565b6060810161546d856157b4565b938152602081019290925260409091015290565b6060810161548e856157be565b93815260208101929092526001600160a01b031660409091015290565b604081016154b8846157b4565b9281526020015290565b6060810161546d856157be565b606081016008851061546d57fe5b60208101600583106154eb57fe5b91905290565b60006154fc866157c8565b858252602082018590526001600160a01b0384166040830152608060608301819052614efa90830184614db5565b604081016154b8846157a7565b60006080825261554a6080830187614db5565b602083820381850152818751808452828401915082838202850101838a01865b8381101561559857601f19878403018552615586838351614e03565b9486019492509085019060010161556a565b505086810360408801526155ac818a614d84565b94505050505082810360608401526150958185614d2d565b602080825260139082015272554e4b4e4f574e5f52455455524e5f4441544160681b604082015260600190565b60208082526019908201527f554e4b4e4f574e5f46554e4354494f4e5f53454c4543544f5200000000000000604082015260600190565b6020808252600d908201526c15539253541311535153951151609a1b604082015260600190565b6020808252600c908201526b2120a22fa9a2a622a1aa27a960a11b604082015260600190565b6020808252600e908201526d15d493d391d7d41493d61657d25160921b604082015260600190565b60a081016156ab8286614de1565b8360608301528215156080830152949350505050565b600060208252610c886020830184614e03565b6000604082526156e76040830185614e03565b82810360208401526151d18185614db5565b9283526020830191909152604082015260600190565b6040518181016001600160401b038111828210171561572d57600080fd5b604052919050565b60006001600160401b0382111561574a578081fd5b5060209081020190565b60006001600160401b03821115615769578081fd5b50601f01601f191660200190565b60005b8381101561579257818101518382015260200161577a565b838111156157a1576000848401525b50505050565b600281106157b157fe5b50565b600481106157b157fe5b600381106157b157fe5b600781106157b157fe5b6001600160a01b03811681146157b157600080fd5b60ff811681146157b157600080fdfea365627a7a72315820ffa7410ae8ac1618f6d2406caae09db56a6e970aba5c127522015bc46216cddd6c6578706572696d656e74616cf564736f6c63430005100040" }, "deployedBytecode": { - "object": "0x608060405234801561001057600080fd5b50600436106102745760003560e01c80639a7e752611610151578063ca49f47c116100c3578063d3d862d111610087578063d3d862d1146106a9578063d4695028146106bc578063e25cabf7146106dc578063e4e6e7da146106fe578063e77286eb1461071f578063ee4f5a941461074157610274565b8063ca49f47c1461062c578063cafd3a071461064f578063d001c5dc14610670578063d186037f14610683578063d36379051461069657610274565b8063a6627e9f11610115578063a6627e9f14610598578063acaedc74146105ab578063b43cffe1146105ce578063bbb2dcf6146105e1578063bc03f96414610603578063c26cfecd1461062457610274565b80639a7e75261461050b5780639eadc8351461052e578063a070cac814610552578063a0901e5114610565578063a5cd62ba1461057857610274565b80634dfdac20116101ea5780637914b2ec116101ae5780637914b2ec146104705780637982653e1461049157806379c9c426146104b15780637b66ad34146104c45780637d727512146104e55780638f4ce479146104f857610274565b80634dfdac20146103d8578063590aa875146103f857806363eb399214610418578063651290421461042b5780636f83188e1461044d57610274565b8063314853ff1161023c578063314853ff14610328578063327d30541461034a57806332aae3ad1461035d5780633db6dc611461037f578063459be5e2146103a257806346eb65cb146103c357610274565b806302d0aec31461027957806304a5618a146102a35780630d7b7d76146102c5578063165979e1146102e65780632322cf7614610308575b600080fd5b61028c610287366004614851565b610763565b60405161029a92919061528b565b60405180910390f35b6102b66102b1366004614851565b6107bf565b60405161029a9392919061537d565b6102d86102d336600461438f565b61083a565b60405161029a929190615239565b6102f96102f4366004614851565b61085c565b60405161029a939291906154b7565b61031b61031636600461438f565b6108b9565b60405161029a91906151f4565b61033b610336366004614851565b6108e1565b60405161029a93929190615260565b6102d8610358366004614851565b610928565b61037061036b366004614851565b61096a565b60405161029a9392919061542d565b61039261038d366004614851565b6109bd565b60405161029a94939291906151fd565b6103b56103b0366004614851565b610a07565b60405161029a9291906154a0565b6103d66103d1366004614851565b610a5d565b005b6103eb6103e63660046142b8565b610b59565b60405161029a919061518e565b61040b610406366004614133565b610bdc565b60405161029a91906153dc565b61040b6104263660046143d2565b610c32565b61043e610439366004614851565b610c8f565b60405161029a93929190614f43565b61046061045b366004614851565b610cc9565b60405161029a949392919061552c565b61048361047e366004614851565b6114d6565b60405161029a9291906152bd565b6104a461049f3660046148fa565b61150e565b60405161029a91906154d2565b61031b6104bf366004614aa9565b611795565b6104d76104d2366004614851565b6117f4565b60405161029a929190614f29565b61031b6104f336600461438f565b61182c565b610483610506366004614851565b611daf565b61051e610519366004614851565b611e0c565b60405161029a94939291906154e6565b61054161053c366004614851565b611e6d565b60405161029a9594939291906152e0565b61031b6105603660046149a7565b611ee5565b6103eb610573366004614453565b611f3c565b61058b6105863660046144b7565b611fb5565b60405161029a9190615095565b61040b6105a6366004614428565b612078565b6105be6105b9366004614851565b6120d1565b60405161029a9493929190614fef565b61040b6105dc366004614305565b61210d565b6105f46105ef366004614851565b61216c565b60405161029a939291906153a8565b610616610611366004614851565b6121e6565b60405161029a929190615247565b61031b61221f565b61063f61063a366004614851565b612225565b60405161029a9493929190615338565b61066261065d366004614851565b6122a3565b60405161029a92919061551f565b6103eb61067e3660046142b8565b6122f1565b61031b61069136600461438f565b61235f565b6104a46106a43660046148fa565b6127e9565b61040b6106b736600461465b565b612b49565b6106cf6106ca366004614851565b612b68565b60405161029a91906152a8565b6106ef6106ea36600461453a565b612c1d565b60405161029a939291906150e2565b61071161070c3660046142b8565b612d55565b60405161029a9291906151cf565b61073261072d366004614951565b612d6e565b60405161029a93929190615692565b61075461074f366004614851565b612fa6565b60405161029a93929190615476565b60008061077783610772612fe3565b612fee565b6000610790600485518661302e9092919063ffffffff16565b8060200190516107a39190810190614804565b909350905060ff811660068111156107b757fe5b915050915091565b600080806107d3848263ffffffff61307116565b92506001600160e01b0319831663012b8bc960e11b1461080e5760405162461bcd60e51b81526004016108059061566a565b60405180910390fd5b61081f84601063ffffffff6130a516565b915061083284602463ffffffff6130d816565b929491935050565b600080610847848461182c565b9150610853848461235f565b90509250929050565b600080600061086d846107726130e4565b6000610886600486518761302e9092919063ffffffff16565b8060200190516108999190810190614c84565b9094509250905060ff811660028111156108af57fe5b9350509193909250565b60008060006108c8858561083a565b915091506108d682826130ef565b925050505b92915050565b60006060806108f284610772613105565b835161090890859060049063ffffffff61302e16565b80602001905161091b91908101906147a5565b9196909550909350915050565b60008061093783610772613110565b825161094d90849060049063ffffffff61302e16565b8060200190516109609190810190614748565b9094909350915050565b600080606061097b8461077261311b565b6000610994600486518761302e9092919063ffffffff16565b8060200190516109a79190810190614c39565b9094509250905060ff811660018111156108af57fe5b6000806060806109cf85610772613126565b84516109e590869060049063ffffffff61302e16565b8060200190516109f89190810190614705565b92989197509550909350915050565b600080610a1683610772613131565b6000610a2f600485518661302e9092919063ffffffff16565b806020019051610a429190810190614b78565b9250905060ff81166003811115610a5557fe5b925050915091565b6000610a6f828263ffffffff61307116565b90506001600160e01b03198116630f47261b60e41b1415610a9a57610a9382611daf565b5050610b55565b6001600160e01b0319811663012b8bc960e11b1415610ac457610abc826107bf565b505050610b55565b6001600160e01b0319811663a7cb5fb760e01b1415610af057610ae682611e6d565b5050505050610b55565b6001600160e01b031981166394cfcdd760e01b1415610b1257610abc8261216c565b6001600160e01b0319811663619ce88560e11b1415610b3d57610b3482612225565b50505050610b55565b60405162461bcd60e51b81526004016108059061566a565b5050565b606060008251905080604051908082528060200260200182016040528015610b8b578160200160208202803883390190505b50915060005b818114610bd457610bb585858381518110610ba857fe5b602002602001015161235f565b838281518110610bc157fe5b6020908102919091010152600101610b91565b505092915050565b604051606090630f47261b60e41b90610bf9908490602401614f15565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050919050565b60405160609063619ce88560e11b90610c5390869086908690602401614fbb565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915290505b9392505050565b6000806000610ca08461077261313c565b8351610cb690859060049063ffffffff61302e16565b80602001905161091b9190810190614188565b60608080806000610ce0868263ffffffff61307116565b90506001600160e01b0319811663dedfc1f160e01b1415610d2c5760405180604001604052806011815260200170626174636843616e63656c4f726465727360781b81525094506110d8565b6001600160e01b03198116634b4a520160e11b1415610d74576040518060400160405280600f81526020016e626174636846696c6c4f726465727360881b81525094506110d8565b6001600160e01b031981166323aa37f960e21b1415610dc35760405180604001604052806016815260200175626174636846696c6c4f72646572734e6f5468726f7760501b81525094506110d8565b6001600160e01b03198116632fbb8b8560e21b1415610e115760405180604001604052806015815260200174626174636846696c6c4f724b696c6c4f726465727360581b81525094506110d8565b6001600160e01b03198116632da6298760e01b1415610e55576040518060400160405280600b81526020016a31b0b731b2b627b93232b960a91b81525094506110d8565b6001600160e01b03198116634da26aab60e11b1415610e9757604051806040016040528060098152602001683334b63627b93232b960b91b81525094506110d8565b6001600160e01b03198116633852d63160e21b1415610edf576040518060400160405280600f81526020016e3334b63627b925b4b63627b93232b960891b81525094506110d8565b6001600160e01b031981166378d29ac160e01b1415610f2e57604051806040016040528060168152602001756d61726b65744275794f72646572734e6f5468726f7760501b81525094506110d8565b6001600160e01b0319811663369da09960e01b1415610f84576040518060400160405280601781526020017f6d61726b657453656c6c4f72646572734e6f5468726f7700000000000000000081525094506110d8565b6001600160e01b03198116638bc8efb360e01b1415610fda576040518060400160405280601981526020017f6d61726b65744275794f726465727346696c6c4f724b696c6c0000000000000081525094506110d8565b6001600160e01b0319811663a6c3bf3360e01b1415611030576040518060400160405280601a81526020017f6d61726b657453656c6c4f726465727346696c6c4f724b696c6c00000000000081525094506110d8565b6001600160e01b031981166388ec79fb60e01b1415611074576040518060400160405280600b81526020016a6d617463684f726465727360a81b81525094506110d8565b6001600160e01b03198116634f9559b160e01b14806110a357506001600160e01b031981166302280c9160e41b145b156110c05760405162461bcd60e51b81526004016108059061561d565b60405162461bcd60e51b8152600401610805906155e6565b6001600160e01b0319811663dedfc1f160e01b141561116457855161110790879060049063ffffffff61314716565b80602001905161111a9190810190614485565b604080516000808252602082019092529195505b506040805160008082526020820190925291945061115c565b60608152602001906001900390816111475790505b5091506114ce565b6001600160e01b03198116632fbb8b8560e21b148061119357506001600160e01b03198116634b4a520160e11b145b806111ae57506001600160e01b031981166323aa37f960e21b145b156111c8576111bc866131c7565b919550935091506114ce565b6001600160e01b03198116632da6298760e01b14156112975760408051600180825281830190925290816020015b6111fe613a68565b8152602001906001900390816111f6575050865190945061122990879060049063ffffffff61314716565b80602001905161123c91908101906148c8565b8460008151811061124957fe5b6020026020010181905250600060405190808252806020026020018201604052801561112e57816020016020820280388339019050506040805160008082526020820190925291945061115c565b6001600160e01b03198116633852d63160e21b14806112c657506001600160e01b03198116634da26aab60e11b145b156112d4576111bc866131f6565b6001600160e01b031981166378d29ac160e01b148061130357506001600160e01b0319811663369da09960e01b145b8061131e57506001600160e01b03198116638bc8efb360e01b145b8061133957506001600160e01b0319811663a6c3bf3360e01b145b15611347576111bc866132f0565b6001600160e01b031981166388ec79fb60e01b14156114ce57611368613a68565b611370613a68565b60608061138a60048b518c6131479092919063ffffffff16565b80602001905161139d91908101906149ff565b604080516002808252606082019092529498509296509094509250816020015b6113c5613a68565b8152602001906001900390816113bd57905050975083886000815181106113e857fe5b6020026020010181905250828860018151811061140157fe5b602090810291909101015260408051600280825260608201909252908160200160208202803883390190505096508360a001518760008151811061144157fe5b6020026020010181815250508260a001518760018151811061145f57fe5b60209081029190910101526040805160028082526060820190925290816020015b606081526020019060019003908161148057905050955081866000815181106114a557fe5b602002602001018190525080866001815181106114be57fe5b6020026020010181905250505050505b509193509193565b6000806114e583610772613364565b82516114fb90849060049063ffffffff61302e16565b8060200190516109609190810190614828565b6000611518613afb565b6115a98584600560009054906101000a90046001600160a01b03166001600160a01b0316631ce4c78b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561156b57600080fd5b505afa15801561157f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115a39190810190614b60565b3a61336e565b60408051600280825260608281019093529293509091816020015b60608152602001906001900390816115c457505060408051600280825260608083018452939450909160208301908038833950506040805160028082526060808301845294955090925090602083019080388339505060408051600280825260608083018452949550909250906020830190803883390190505090508861014001518460008151811061165357fe5b602002602001018190525088600001518360008151811061167057fe5b60200260200101906001600160a01b031690816001600160a01b031681525050878260008151811061169e57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508460000151816000815181106116d057fe5b602002602001018181525050886101800151846001815181106116ef57fe5b602002602001018190525088600001518360018151811061170c57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505088604001518260018151811061173e57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505084604001518160018151811061177057fe5b602002602001018181525050611788848484846133e5565b9998505050505050505050565b60006117ec846117e76040518060400160405280600b81526020016a0c1e08141c9bdd1bd8dbdb60aa1b815250604051806040016040528060058152602001640332e302e360dc1b815250878761358a565b6135e1565b949350505050565b600080611803836107726135f5565b825161181990849060049063ffffffff61302e16565b806020019051610960919081019061414f565b60008061183f838263ffffffff61307116565b90506001600160e01b03198116630f47261b60e41b141561195857600061186d84601063ffffffff6130a516565b6040519091506060906370a0823160e01b9061188d908890602401614f15565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060836001600160a01b0316836040516118de9190614ef9565b600060405180830381855afa9150503d8060008114611919576040519150601f19603f3d011682016040523d82523d6000602084013e61191e565b606091505b5091509150818015611931575080516020145b61193c57600061194d565b61194d81600063ffffffff6130d816565b955050505050611da8565b6001600160e01b0319811663012b8bc960e11b1415611a975760008061197d856107bf565b6040519194509250606091506331a9108f60e11b906119a09084906024016151f4565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060846001600160a01b0316836040516119f19190614ef9565b600060405180830381855afa9150503d8060008114611a2c576040519150601f19603f3d011682016040523d82523d6000602084013e611a31565b606091505b50915091506000828015611a46575081516020145b611a51576000611a62565b611a6282600c63ffffffff6130a516565b9050896001600160a01b0316816001600160a01b031614611a84576000611a87565b60015b60ff169750505050505050611da8565b6001600160e01b0319811663a7cb5fb760e01b1415611c1e576000606080611abe86611e6d565b5081519296509094509250905060005b818114611c14578351606090627eeac760e11b908b90879085908110611af057fe5b6020026020010151604051602401611b09929190615025565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060876001600160a01b031683604051611b5a9190614ef9565b600060405180830381855afa9150503d8060008114611b95576040519150601f19603f3d011682016040523d82523d6000602084013e611b9a565b606091505b50915091506000828015611baf575081516020145b611bba576000611bcb565b611bcb82600063ffffffff6130d816565b90506000878681518110611bdb57fe5b60200260200101518281611beb57fe5b0490508b811080611bfa57508b155b15611c0357809b505b505060019093019250611ace915050565b5050505050611da8565b6001600160e01b0319811663619ce88560e11b1415611d0a57604051606090632a17967960e21b90611c5b908690600090819081906024016153ef565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925260045491519092506000916001600160a01b031690611cad908490614ef9565b600060405180830381855afa9150503d8060008114611ce8576040519150601f19603f3d011682016040523d82523d6000602084013e611ced565b606091505b5050905080611cfd576000611d01565b6000195b93505050611da8565b6001600160e01b031981166394cfcdd760e01b1415611da857606080611d2f8561216c565b80519194509250905060005b818114611da3576000611d6189858481518110611d5457fe5b602002602001015161182c565b90506000858381518110611d7157fe5b60200260200101518281611d8157fe5b04905087811080611d90575087155b15611d99578097505b5050600101611d3b565b505050505b5092915050565b600080611dc2838263ffffffff61307116565b91506001600160e01b03198216630f47261b60e41b14611df45760405162461bcd60e51b81526004016108059061566a565b611e0583601063ffffffff6130a516565b9050915091565b60008060006060611e1f85610772613600565b6000611e38600487518861302e9092919063ffffffff16565b806020019051611e4b9190810190614bdc565b91965094509250905060ff81166006811115611e6357fe5b9450509193509193565b60008060608080611e84868563ffffffff61307116565b94506001600160e01b0319851663a7cb5fb760e01b14611eb65760405162461bcd60e51b81526004016108059061566a565b505050506024828101516044840151606485015160848601519496929591820184019490820184019391010190565b60006117ec84611f376040518060400160405280600b81526020016a0c1e08141c9bdd1bd8dbdb60aa1b815250604051806040016040528060058152602001640332e302e360dc1b815250878761358a565b61360b565b6060808251604051908082528060200260200182016040528015611f6a578160200160208202803883390190505b50905060005b83518114611da857838181518110611f8457fe5b60200260200101516001600160a01b031631828281518110611fa257fe5b6020908102919091010152600101611f70565b606060008451905080604051908082528060200260200182016040528015611fe7578160200160208202803883390190505b50915060005b81811461206f5761203886828151811061200357fe5b602002602001015186838151811061201757fe5b602002602001015186848151811061202b57fe5b60200260200101516127e9565b83828151811061204457fe5b6020026020010190600481111561205757fe5b9081600481111561206457fe5b905250600101611fed565b50509392505050565b60405160609063012b8bc960e11b906120979085908590602401615025565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905092915050565b600060608060606120e48561077261361a565b84516120fa90869060049063ffffffff61302e16565b8060200190516109f89190810190614221565b60405160609063a7cb5fb760e01b90612130908790879087908790602401614f67565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050949350505050565b6000606080612181848463ffffffff61307116565b92506001600160e01b031983166394cfcdd760e01b146121b35760405162461bcd60e51b81526004016108059061566a565b83516121c990859060049063ffffffff61314716565b8060200190516121dc919081019061468f565b9395909450915050565b600060606121f683610772613625565b825161220c90849060049063ffffffff61302e16565b806020019051610960919081019061476b565b60065481565b60008060608161223b858263ffffffff61307116565b93506001600160e01b0319841663619ce88560e11b1461226d5760405162461bcd60e51b81526004016108059061566a565b845161228390869060049063ffffffff61314716565b80602001905161229691908101906141ca565b9597919650949350915050565b6000806122b283610772613630565b60006122cb600485518661302e9092919063ffffffff16565b8060200190516122de9190810190614b78565b9250905060ff81166001811115610a5557fe5b606060008251905080604051908082528060200260200182016040528015612323578160200160208202803883390190505b50915060005b818114610bd45761234085858381518110611d5457fe5b83828151811061234c57fe5b6020908102919091010152600101612329565b600080612372838263ffffffff61307116565b90506001600160e01b031981166394cfcdd760e01b141561240b576060806123998561216c565b80519194509250905060005b8181146124005760006123be89858481518110610ba857fe5b905060008583815181106123ce57fe5b602002602001015182816123de57fe5b049050878110806123ed575087155b156123f6578097505b50506001016123a5565b506108db9350505050565b6001600160e01b03198116630f47261b60e41b141561246457600061243784601063ffffffff6130a516565b600154604051919250606091636eb1769f60e11b9161188d9189916001600160a01b031690602401614f29565b6001600160e01b0319811663012b8bc960e11b141561269757600080612489856107bf565b6002546040519295509093506060925063e985e9c560e01b916124bc918a916001600160a01b0390911690602401614f29565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060846001600160a01b03168360405161250d9190614ef9565b600060405180830381855afa9150503d8060008114612548576040519150601f19603f3d011682016040523d82523d6000602084013e61254d565b606091505b509150915081158061256157508051602014155b8061257d575061257881600063ffffffff6130d816565b600114155b156126885760405160609063020604bf60e21b9061259f9087906024016151f4565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050856001600160a01b0316816040516125ec9190614ef9565b600060405180830381855afa9150503d8060008114612627576040519150601f19603f3d011682016040523d82523d6000602084013e61262c565b606091505b509093509150828015612640575081516020145b801561266f57506002546001600160a01b031661266483600c63ffffffff6130a516565b6001600160a01b0316145b61267a57600061267d565b60015b60ff16975050611c14565b60001996505050505050611da8565b6001600160e01b0319811663a7cb5fb760e01b14156127c55760006126bb84611e6d565b50506003546040519294506060935063e985e9c560e01b926126ec925089916001600160a01b031690602401614f29565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060836001600160a01b03168360405161273d9190614ef9565b600060405180830381855afa9150503d8060008114612778576040519150601f19603f3d011682016040523d82523d6000602084013e61277d565b606091505b5091509150818015612790575080516020145b80156127ac57506127a881600063ffffffff6130d816565b6001145b6127b757600061194d565b600019955050505050611da8565b6001600160e01b0319811663619ce88560e11b1415611da857506000199392505050565b60006127f3613afb565b6128468584600560009054906101000a90046001600160a01b03166001600160a01b0316631ce4c78b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561156b57600080fd5b60408051600480825260a0820190925291925060609190816020015b606081526020019060019003908161286257505060408051600480825260a082019092529192506060919060208201608080388339505060408051600480825260a08201909252929350606092915060208201608080388339505060408051600480825260a08201909252929350606092915060208201608080388339019050509050886101600151846000815181106128f857fe5b6020026020010181905250878360008151811061291157fe5b60200260200101906001600160a01b031690816001600160a01b03168152505088600001518260008151811061294357fe5b60200260200101906001600160a01b031690816001600160a01b031681525050868160008151811061297157fe5b6020026020010181815250508861014001518460018151811061299057fe5b60200260200101819052508860000151836001815181106129ad57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505087826001815181106129db57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050846000015181600181518110612a0d57fe5b602002602001018181525050886101a0015184600281518110612a2c57fe5b60200260200101819052508783600281518110612a4557fe5b60200260200101906001600160a01b031690816001600160a01b031681525050886040015182600281518110612a7757fe5b60200260200101906001600160a01b031690816001600160a01b031681525050846060015181600281518110612aa957fe5b60200260200101818152505088610180015184600381518110612ac857fe5b6020026020010181905250886000015183600381518110612ae557fe5b60200260200101906001600160a01b031690816001600160a01b031681525050886040015182600381518110612b1757fe5b60200260200101906001600160a01b031690816001600160a01b03168152505084604001518160038151811061177057fe5b6040516060906394cfcdd760e01b9061209790859085906024016151a1565b6000612b7a828263ffffffff61307116565b90506001600160e01b03198116630f47261b60e41b1480612bab57506001600160e01b0319811663012b8bc960e11b145b80612bc657506001600160e01b0319811663a7cb5fb760e01b145b80612be157506001600160e01b031981166394cfcdd760e01b145b80612bfc57506001600160e01b0319811663619ce88560e11b145b612c185760405162461bcd60e51b81526004016108059061566a565b919050565b606080606060008551905080604051908082528060200260200182016040528015612c6257816020015b612c4f613b2a565b815260200190600190039081612c475790505b50935080604051908082528060200260200182016040528015612c8f578160200160208202803883390190505b50925080604051908082528060200260200182016040528015612cbc578160200160208202803883390190505b50915060005b818114612d4c57612cf9878281518110612cd857fe5b6020026020010151878381518110612cec57fe5b6020026020010151612d6e565b8751889085908110612d0757fe5b60200260200101878581518110612d1a57fe5b60200260200101878681518110612d2d57fe5b9315156020948502919091019093019290925291905252600101612cc2565b50509250925092565b606080612d6284846122f1565b91506108538484610b59565b612d76613b2a565b600554604051639d3fa4b960e01b815260009182916001600160a01b0390911690639d3fa4b990612dab9088906004016156b6565b60606040518083038186803b158015612dc357600080fd5b505afa158015612dd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612dfb9190810190614883565b855160055460405163a12dcc6f60e01b815292955090916001600160a01b039091169063a12dcc6f90612e3490899089906004016156c9565b60206040518083038186803b158015612e4c57600080fd5b505afa158015612e60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612e8491908101906146e5565b91506000612e97828861014001516108b9565b60a088015160c08901516101808a01516101408b015193945091929091600091612ec69163ffffffff61363b16565b15612ef357612eec84612ee6848d6080015161366090919063ffffffff16565b8561367c565b9050612f4c565b81612f0757612eec848b608001518561367c565b6000612f18868c61018001516108b9565b90506000612f2b868d608001518761367c565b90506000612f3a83868861367c565b9050612f4682826130ef565b93505050505b612f6c612f6689604001518561369e90919063ffffffff16565b826130ef565b96506004612f7f8b8c602001518a61150e565b6004811115612f8a57fe5b14612f96576000612f98565b865b965050505050509250925092565b6000806000612fb7846107726136bd565b6000612fd0600486518761302e9092919063ffffffff16565b8060200190516108999190810190614ba5565b63fdb6ca8d60e01b90565b6000612ffb836000613071565b90506001600160e01b0319808216908316146130295760405162461bcd60e51b815260040161080590615644565b505050565b60608183111561304c5761304c613047600085856136c8565b6136e7565b83518211156130655761306561304760018487516136c8565b50819003910190815290565b600081600401835110156130925761309261304760038551856004016136c8565b5001602001516001600160e01b03191690565b600081601401835110156130c6576130c661304760048551856014016136c8565b5001601401516001600160a01b031690565b6000610c8883836136ef565b6318e4b14160e01b90565b60008183106130fe5781610c88565b5090919050565b634678472b60e01b90565b63b6555d6f60e01b90565b6324410cd360e11b90565b631b8388f760e01b90565b630e94a7ed60e41b90565b634ad3127560e01b90565b60608183111561316057613160613047600085856136c8565b83518211156131795761317961304760018487516136c8565b8282036040519080825280601f01601f1916602001820160405280156131a6576020820181803883390190505b509050610c886131b582613719565b846131bf87613719565b01835161371f565b60608060606131e360048551866131479092919063ffffffff16565b80602001905161091b9190810190614590565b60408051600180825281830190925260609182918291816020015b613219613a68565b8152602001906001900390816132115750506040805160018082528183019092529194506020808301908038833901905050604080516001808252818301909252919350816020015b6060815260200190600190039081613262575050845190915061328f90859060049063ffffffff61314716565b8060200190516132a29190810190614a57565b856000815181106132af57fe5b60200260200101856000815181106132c357fe5b60200260200101856000815181106132d757fe5b6020908102919091010192909252919052529193909250565b60408051600180825281830190925260609182918291602080830190803883395050855191935061332c9186915060049063ffffffff61314716565b80602001905161333f9190810190614609565b8451859060009061334c57fe5b60209081029190910101919091529095929450925050565b628e3db960e51b90565b613376613afb565b6020810184905260a085015160808601516133929186916137c4565b815260a085015160c08601516133a99186916137c4565b604082015260a085015160e08601516133c39186916137c4565b60608201526133d8828463ffffffff6137f816565b6080820152949350505050565b60405160009060609063b04fbddd60e01b9061340b90889088908890889060240161503e565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925260055491519092506060916001600160a01b03169061345d908490614ef9565b6000604051808303816000865af19150503d806000811461349a576040519150601f19603f3d011682016040523d82523d6000602084013e61349f565b606091505b509150600090506134b6828263ffffffff61307116565b90506134c061311b565b6001600160e01b0319828116911614156134fd5760006134df8361096a565b5091505060ff811660048111156134f257fe5b9450505050506117ec565b613505613105565b6001600160e01b031982811691161415613538576000613524836108e1565b509091505060ff811660048111156134f257fe5b815160208301207ff43f26ea5a94b478394a975e856464913dc1a8a1ca70939d974aa7c238aa0ce0141561357257600493505050506117ec565b60405162461bcd60e51b8152600401610805906155b9565b8351602094850120835193850193909320604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f815295860194909452928401929092526060830152608082015260a0902090565b6000610c88826135f085613829565b6138a4565b6350ae068360e11b90565b630fcb446360e31b90565b6000610c88826135f0856138c3565b635bd0428d60e01b90565b6320d11f6160e01b90565b633d66146160e21b90565b600081518351148015610c885750508051602091820120825192909101919091201490565b600082820183811015610c8857610c886130476000868661397c565b60006117ec83613692868563ffffffff6137f816565b9063ffffffff61399b16565b6000828211156136b7576136b76130476002858561397c565b50900390565b631ca78ed960e31b90565b6060632800659560e01b848484604051602401610c53939291906154c4565b805160208201fd5b600081602001835110156137105761371061304760058551856020016136c8565b50016020015190565b60200190565b6020811015613749576001816020036101000a038019835116818551168082178652505050613029565b8282141561375657613029565b828211156137905760208103905080820181840181515b8285101561378857845186526020958601959094019361376d565b905250613029565b60208103905080820181840183515b818612156137bb5782518252601f19928301929091019061379f565b85525050505050565b60006137d18484846139c5565b156137e4576137e4613047858585613a2b565b6117ec83613692868563ffffffff6137f816565b600082613807575060006108db565b8282028284828161381457fe5b0414610c8857610c886130476001868661397c565b608081810151825160208085015160408087015160609788015186519685019690962082517fec69816980a3a3ca4554410e60253953e9ff375ba4536a98adfa15cc7154150881529485019590955290830191909152948101949094526001600160a01b039091169183019190915260a082015260c0902090565b60405161190160f01b8152600281019290925260228201526042902090565b6101408101516101608201516101808301516101a08401516000937ff80322eb8376aafb64eadf8f0d7623f22130fd9491a221e902b713cb984a75349390929091602087101561390f57fe5b601f1987018051610140890180516101608b0180516101808d0180516101a08f0180519d89528c5160209d8e012087528b519b8d019b909b2084528951998c01999099208152875197909a019690962088526101e085209390945290529190529252919091529050919050565b606063e946c1bb60e01b848484604051602401610c5393929190615455565b6000816139b1576139b16130476003858561397c565b60008284816139bc57fe5b04949350505050565b6000826139d7576139d7613047613a4a565b8115806139e2575083155b156139ef57506000610c88565b600083806139f957fe5b8584099050613a0e858463ffffffff6137f816565b613a20826103e863ffffffff6137f816565b101595945050505050565b606063339f3de260e01b848484604051602401610c53939291906156ee565b60408051808201909152600481526329e460df60e21b602082015290565b604051806101c0016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001606081525090565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b80356108db816157c7565b80516108db816157c7565b600082601f830112613b70578081fd5b8135613b83613b7e8261572a565b615704565b818152915060208083019084810181840286018201871015613ba457600080fd5b60005b84811015611da3578135613bba816157c7565b84529282019290820190600101613ba7565b600082601f830112613bdc578081fd5b8151613bea613b7e8261572a565b8181529150602080830190840160005b83811015613c2757613c128760208451890101613e4c565b83526020928301929190910190600101613bfa565b5050505092915050565b600082601f830112613c41578081fd5b8135613c4f613b7e8261572a565b8181529150602080830190840160005b83811015613c2757613c778760208435890101613dfe565b83526020928301929190910190600101613c5f565b600082601f830112613c9c578081fd5b8151613caa613b7e8261572a565b8181529150602080830190840160005b83811015613c2757613cd28760208451890101613fe0565b83526020928301929190910190600101613cba565b600082601f830112613cf7578081fd5b8135613d05613b7e8261572a565b8181529150602080830190840160005b83811015613c2757613d2d8760208435890101613e92565b83526020928301929190910190600101613d15565b600082601f830112613d52578081fd5b8151613d60613b7e8261572a565b818152915060208083019084810181840286018201871015613d8157600080fd5b60005b84811015611da357815184529282019290820190600101613d84565b600082601f830112613db0578081fd5b8135613dbe613b7e8261572a565b818152915060208083019084810181840286018201871015613ddf57600080fd5b60005b84811015611da357813584529282019290820190600101613de2565b600082601f830112613e0e578081fd5b8135613e1c613b7e82615749565b9150808252836020828501011115613e3357600080fd5b8060208401602084013760009082016020015292915050565b600082601f830112613e5c578081fd5b8151613e6a613b7e82615749565b9150808252836020828501011115613e8157600080fd5b611da881602084016020860161576c565b60006101c0808385031215613ea5578182fd5b613eae81615704565b915050613ebb8383613b4a565b8152613eca8360208401613b4a565b6020820152613edc8360408401613b4a565b6040820152613eee8360608401613b4a565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e0820152610100808301358183015250610120808301358183015250610140808301356001600160401b0380821115613f4f57600080fd5b613f5b86838701613dfe565b83850152610160925082850135915080821115613f7757600080fd5b613f8386838701613dfe565b83850152610180925082850135915080821115613f9f57600080fd5b613fab86838701613dfe565b838501526101a0925082850135915080821115613fc757600080fd5b50613fd485828601613dfe565b82840152505092915050565b60006101c0808385031215613ff3578182fd5b613ffc81615704565b9150506140098383613b55565b81526140188360208401613b55565b602082015261402a8360408401613b55565b604082015261403c8360608401613b55565b60608201526080820151608082015260a082015160a082015260c082015160c082015260e082015160e0820152610100808301518183015250610120808301518183015250610140808301516001600160401b038082111561409d57600080fd5b6140a986838701613e4c565b838501526101609250828501519150808211156140c557600080fd5b6140d186838701613e4c565b838501526101809250828501519150808211156140ed57600080fd5b6140f986838701613e4c565b838501526101a092508285015191508082111561411557600080fd5b50613fd485828601613e4c565b805160ff811681146108db57600080fd5b600060208284031215614144578081fd5b8135610c88816157c7565b60008060408385031215614161578081fd5b825161416c816157c7565b602084015190925061417d816157c7565b809150509250929050565b60008060006060848603121561419c578081fd5b83516141a7816157c7565b60208501519093506141b8816157c7565b80925050604084015190509250925092565b6000806000606084860312156141de578081fd5b83516141e9816157c7565b60208501519093506001600160401b03811115614204578182fd5b61421086828701613e4c565b925050604084015190509250925092565b60008060008060808587031215614236578182fd5b8451614241816157c7565b60208601519094506001600160401b038082111561425d578384fd5b61426988838901613e4c565b9450604087015191508082111561427e578384fd5b61428a88838901613e4c565b9350606087015191508082111561429f578283fd5b506142ac87828801613e4c565b91505092959194509250565b600080604083850312156142ca578182fd5b82356142d5816157c7565b915060208301356001600160401b038111156142ef578182fd5b6142fb85828601613c31565b9150509250929050565b6000806000806080858703121561431a578182fd5b8435614325816157c7565b935060208501356001600160401b0380821115614340578384fd5b61434c88838901613da0565b94506040870135915080821115614361578384fd5b61436d88838901613da0565b93506060870135915080821115614382578283fd5b506142ac87828801613dfe565b600080604083850312156143a1578182fd5b82356143ac816157c7565b915060208301356001600160401b038111156143c6578182fd5b6142fb85828601613dfe565b6000806000606084860312156143e6578081fd5b83356143f1816157c7565b925060208401356001600160401b0381111561440b578182fd5b61441786828701613dfe565b925050604084013590509250925092565b6000806040838503121561443a578182fd5b8235614445816157c7565b946020939093013593505050565b600060208284031215614464578081fd5b81356001600160401b03811115614479578182fd5b6117ec84828501613b60565b600060208284031215614496578081fd5b81516001600160401b038111156144ab578182fd5b6117ec84828501613c8c565b6000806000606084860312156144cb578081fd5b83356001600160401b03808211156144e1578283fd5b6144ed87838801613ce7565b94506020860135915080821115614502578283fd5b61450e87838801613b60565b93506040860135915080821115614523578283fd5b5061453086828701613da0565b9150509250925092565b6000806040838503121561454c578182fd5b82356001600160401b0380821115614562578384fd5b61456e86838701613ce7565b93506020850135915080821115614583578283fd5b506142fb85828601613c31565b6000806000606084860312156145a4578081fd5b83516001600160401b03808211156145ba578283fd5b6145c687838801613c8c565b945060208601519150808211156145db578283fd5b6145e787838801613d42565b935060408601519150808211156145fc578283fd5b5061453086828701613bcc565b60008060006060848603121561461d578081fd5b83516001600160401b0380821115614633578283fd5b61463f87838801613c8c565b94506020860151935060408601519150808211156145fc578283fd5b6000806040838503121561466d578182fd5b82356001600160401b0380821115614683578384fd5b61456e86838701613da0565b600080604083850312156146a1578182fd5b82516001600160401b03808211156146b7578384fd5b6146c386838701613d42565b935060208501519150808211156146d8578283fd5b506142fb85828601613bcc565b6000602082840312156146f6578081fd5b81518015158114610c88578182fd5b6000806000806080858703121561471a578182fd5b84519350602085015161472c816157c7565b60408601519093506001600160401b038082111561427e578384fd5b6000806040838503121561475a578182fd5b505080516020909101519092909150565b6000806040838503121561477d578182fd5b8251915060208301516001600160401b03811115614799578182fd5b6142fb85828601613e4c565b6000806000606084860312156147b9578081fd5b8351925060208401516001600160401b03808211156147d6578283fd5b6147e287838801613e4c565b935060408601519150808211156147f7578283fd5b5061453086828701613e4c565b60008060408385031215614816578182fd5b82519150602083015161417d816157dc565b6000806040838503121561483a578182fd5b82516001600160e01b03198116811461416c578283fd5b600060208284031215614862578081fd5b81356001600160401b03811115614877578182fd5b6117ec84828501613dfe565b600060608284031215614894578081fd5b61489e6060615704565b6148a88484614122565b815260208301516020820152604083015160408201528091505092915050565b6000602082840312156148d9578081fd5b81516001600160401b038111156148ee578182fd5b6117ec84828501613fe0565b60008060006060848603121561490e578081fd5b83356001600160401b03811115614923578182fd5b61492f86828701613e92565b9350506020840135614940816157c7565b929592945050506040919091013590565b60008060408385031215614963578182fd5b82356001600160401b0380821115614979578384fd5b61498586838701613e92565b9350602085013591508082111561499a578283fd5b506142fb85828601613dfe565b6000806000606084860312156149bb578081fd5b83356001600160401b038111156149d0578182fd5b6149dc86828701613e92565b9350506020840135915060408401356149f4816157c7565b809150509250925092565b60008060008060808587031215614a14578182fd5b84516001600160401b0380821115614a2a578384fd5b614a3688838901613fe0565b95506020870151915080821115614a4b578384fd5b61426988838901613fe0565b600080600060608486031215614a6b578081fd5b83516001600160401b0380821115614a81578283fd5b614a8d87838801613fe0565b94506020860151935060408601519150808211156147f7578283fd5b600080600060608486031215614abd578081fd5b83356001600160401b0380821115614ad3578283fd5b81860160a08189031215614ae5578384fd5b614aef60a0615704565b9250803583526020810135602084015260408101356040840152614b168860608301613b4a565b6060840152608081013582811115614b2c578485fd5b614b3889828401613dfe565b608085015250919450505060208401359150614b578560408601613b4a565b90509250925092565b600060208284031215614b71578081fd5b5051919050565b60008060408385031215614b8a578182fd5b8251614b95816157dc565b6020939093015192949293505050565b600080600060608486031215614bb9578081fd5b8351614bc4816157dc565b6020850151604086015191945092506149f4816157c7565b60008060008060808587031215614bf1578182fd5b614bfb8686614122565b9350602085015192506040850151614c12816157c7565b60608601519092506001600160401b03811115614c2d578182fd5b6142ac87828801613e4c565b600080600060608486031215614c4d578081fd5b614c578585614122565b92506020840151915060408401516001600160401b03811115614c78578182fd5b61453086828701613e4c565b600080600060608486031215614c98578081fd5b614ca28585614122565b925060208401519150604084015190509250925092565b1515815260200190565b6000614ccf8383614ddc565b505060600190565b6001600160a01b03169052565b6000815180845260208401935060208301825b82811015614d1e5781516001600160a01b0316865260209586019590910190600101614cf7565b5093949350505050565b600081518084526020840180819550602083028101915060208501845b84811015614d73578284038852614d5d848351614db0565b6020988901989094509190910190600101614d45565b50919695505050505050565b6000815180845260208401935060208301825b82811015614d1e578151865260209586019590910190600101614d92565b60008151808452614dc881602086016020860161576c565b601f01601f19169290920160200192915050565b805160ff16825260208082015190830152604090810151910152565b60006101c0614e08848451614cd7565b6020830151614e1a6020860182614cd7565b506040830151614e2d6040860182614cd7565b506060830151614e406060860182614cd7565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e0850152610100808401518186015250610120808401518186015250610140808401518282870152614e9983870182614db0565b91505061016091508184015185820383870152614eb68282614db0565b925050506101808084015185830382870152614ed28382614db0565b9150506101a091508184015185820383870152614eef8282614db0565b9695505050505050565b60008251614f0b81846020870161576c565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0385168152608060208201819052600090614f8b90830186614d7f565b8281036040840152614f9d8186614d7f565b8381036060850152614faf8186614db0565b98975050505050505050565b6001600160a01b0384168152606060208201819052600090614fdf90830185614db0565b9050826040830152949350505050565b6001600160a01b038516815260806020820181905260009061501390830186614db0565b8281036040840152614f9d8186614db0565b6001600160a01b03929092168252602082015260400190565b6000608082526150516080830187614d28565b82810360208401526150638187614ce4565b83810360408501526150758187614ce4565b915050828103606084015261508a8185614d7f565b979650505050505050565b602080825282518282018190526000918401906040840190835b818110156150d7578351600581106150c357fe5b8352602093840193909201916001016150af565b509095945050505050565b600060608201606083528086516150f981846151f4565b9150602088019250835b8181101561512757615116838551614cc3565b602094909401939250600101615103565b5050838103602085015261513b8187614d7f565b915050828103604084015280845161515381846151f4565b9150602086019250835b8181101561518157615170838551614cb9565b60209490940193925060010161515d565b5090979650505050505050565b600060208252610c886020830184614d7f565b6000604082526151b46040830185614d7f565b82810360208401526151c68185614d28565b95945050505050565b6000604082526151e26040830185614d7f565b82810360208401526151c68185614d7f565b90815260200190565b8481526001600160a01b038416602082015260806040820181905260009061522790830185614db0565b828103606084015261508a8185614db0565b918252602082015260400190565b6000838252604060208301526117ec6040830184614db0565b6000848252606060208301526152796060830185614db0565b8281036040840152614eef8185614db0565b8281526040810161529b836157bd565b8260208301529392505050565b6001600160e01b031991909116815260200190565b6001600160e01b03199290921682526001600160a01b0316602082015260400190565b6001600160e01b0319861681526001600160a01b038516602082015260a06040820181905260009061531490830186614d7f565b82810360608401526153268186614d7f565b83810360808501526117888186614db0565b6001600160e01b0319851681526001600160a01b038416602082015260806040820181905260009061536c90830185614db0565b905082606083015295945050505050565b6001600160e01b03199390931683526001600160a01b03919091166020830152604082015260600190565b600063ffffffff60e01b85168252606060208301526153ca6060830185614d7f565b8281036040840152614eef8185614d28565b600060208252610c886020830184614db0565b6000608082526154026080830187614db0565b6001600160a01b03958616602084015293909416604082015260ff9190911660609091015292915050565b60006154388561579c565b848252836020830152606060408301526151c66060830184614db0565b60608101615462856157a9565b938152602081019290925260409091015290565b60608101615483856157b3565b93815260208101929092526001600160a01b031660409091015290565b604081016154ad846157a9565b9281526020015290565b60608101615462856157b3565b606081016008851061546257fe5b60208101600583106154e057fe5b91905290565b60006154f1866157bd565b858252602082018590526001600160a01b0384166040830152608060608301819052614eef90830184614db0565b604081016154ad8461579c565b60006080825261553f6080830187614db0565b602083820381850152818751808452828401915082838202850101838a01865b8381101561558d57601f1987840301855261557b838351614df8565b9486019492509085019060010161555f565b505086810360408801526155a1818a614d7f565b945050505050828103606084015261508a8185614d28565b602080825260139082015272554e4b4e4f574e5f52455455524e5f4441544160681b604082015260600190565b60208082526019908201527f554e4b4e4f574e5f46554e4354494f4e5f53454c4543544f5200000000000000604082015260600190565b6020808252600d908201526c15539253541311535153951151609a1b604082015260600190565b6020808252600c908201526b2120a22fa9a2a622a1aa27a960a11b604082015260600190565b6020808252600e908201526d15d493d391d7d41493d61657d25160921b604082015260600190565b60a081016156a08286614ddc565b8360608301528215156080830152949350505050565b600060208252610c886020830184614df8565b6000604082526156dc6040830185614df8565b82810360208401526151c68185614db0565b9283526020830191909152604082015260600190565b6040518181016001600160401b038111828210171561572257600080fd5b604052919050565b60006001600160401b0382111561573f578081fd5b5060209081020190565b60006001600160401b0382111561575e578081fd5b50601f01601f191660200190565b60005b8381101561578757818101518382015260200161576f565b83811115615796576000848401525b50505050565b600281106157a657fe5b50565b600481106157a657fe5b600381106157a657fe5b600781106157a657fe5b6001600160a01b03811681146157a657600080fd5b60ff811681146157a657600080fdfea365627a7a723158204793664dee66dcabc4a710b9901a17d347a2ff1fb84df266b96a650f614b87756c6578706572696d656e74616cf564736f6c634300050f0040" + "object": "0x608060405234801561001057600080fd5b50600436106102745760003560e01c80639a7e752611610151578063ca49f47c116100c3578063d3d862d111610087578063d3d862d1146106a9578063d4695028146106bc578063e25cabf7146106dc578063e4e6e7da146106fe578063e77286eb1461071f578063ee4f5a941461074157610274565b8063ca49f47c1461062c578063cafd3a071461064f578063d001c5dc14610670578063d186037f14610683578063d36379051461069657610274565b8063a6627e9f11610115578063a6627e9f14610598578063acaedc74146105ab578063b43cffe1146105ce578063bbb2dcf6146105e1578063bc03f96414610603578063c26cfecd1461062457610274565b80639a7e75261461050b5780639eadc8351461052e578063a070cac814610552578063a0901e5114610565578063a5cd62ba1461057857610274565b80634dfdac20116101ea5780637914b2ec116101ae5780637914b2ec146104705780637982653e1461049157806379c9c426146104b15780637b66ad34146104c45780637d727512146104e55780638f4ce479146104f857610274565b80634dfdac20146103d8578063590aa875146103f857806363eb399214610418578063651290421461042b5780636f83188e1461044d57610274565b8063314853ff1161023c578063314853ff14610328578063327d30541461034a57806332aae3ad1461035d5780633db6dc611461037f578063459be5e2146103a257806346eb65cb146103c357610274565b806302d0aec31461027957806304a5618a146102a35780630d7b7d76146102c5578063165979e1146102e65780632322cf7614610308575b600080fd5b61028c610287366004614853565b610763565b60405161029a929190615296565b60405180910390f35b6102b66102b1366004614853565b6107bf565b60405161029a93929190615388565b6102d86102d3366004614391565b61083a565b60405161029a929190615244565b6102f96102f4366004614853565b61085c565b60405161029a939291906154c2565b61031b610316366004614391565b6108b9565b60405161029a91906151ff565b61033b610336366004614853565b6108e1565b60405161029a9392919061526b565b6102d8610358366004614853565b610928565b61037061036b366004614853565b61096a565b60405161029a93929190615438565b61039261038d366004614853565b6109bd565b60405161029a9493929190615208565b6103b56103b0366004614853565b610a07565b60405161029a9291906154ab565b6103d66103d1366004614853565b610a5d565b005b6103eb6103e63660046142ba565b610b59565b60405161029a9190615199565b61040b610406366004614135565b610bdc565b60405161029a91906153e7565b61040b6104263660046143d4565b610c32565b61043e610439366004614853565b610c8f565b60405161029a93929190614f4e565b61046061045b366004614853565b610cc9565b60405161029a9493929190615537565b61048361047e366004614853565b6114d6565b60405161029a9291906152c8565b6104a461049f3660046148ff565b61150e565b60405161029a91906154dd565b61031b6104bf366004614aae565b611795565b6104d76104d2366004614853565b6117f4565b60405161029a929190614f34565b61031b6104f3366004614391565b61182c565b610483610506366004614853565b611daf565b61051e610519366004614853565b611e0c565b60405161029a94939291906154f1565b61054161053c366004614853565b611e6d565b60405161029a9594939291906152eb565b61031b6105603660046149ac565b611ee5565b6103eb610573366004614455565b611f3c565b61058b6105863660046144b9565b611fb5565b60405161029a91906150a0565b61040b6105a636600461442a565b612078565b6105be6105b9366004614853565b6120d1565b60405161029a9493929190614ffa565b61040b6105dc366004614307565b61210d565b6105f46105ef366004614853565b61216c565b60405161029a939291906153b3565b610616610611366004614853565b6121e6565b60405161029a929190615252565b61031b61221f565b61063f61063a366004614853565b612225565b60405161029a9493929190615343565b61066261065d366004614853565b6122a3565b60405161029a92919061552a565b6103eb61067e3660046142ba565b6122f1565b61031b610691366004614391565b61235f565b6104a46106a43660046148ff565b6127e9565b61040b6106b736600461465d565b612b49565b6106cf6106ca366004614853565b612b68565b60405161029a91906152b3565b6106ef6106ea36600461453c565b612c1d565b60405161029a939291906150ed565b61071161070c3660046142ba565b612d55565b60405161029a9291906151da565b61073261072d366004614956565b612d6e565b60405161029a9392919061569d565b61075461074f366004614853565b612fa6565b60405161029a93929190615481565b60008061077783610772612fe3565b612fee565b6000610790600485518661302e9092919063ffffffff16565b8060200190516107a39190810190614806565b909350905060ff811660068111156107b757fe5b915050915091565b600080806107d3848263ffffffff61307116565b92506001600160e01b0319831663012b8bc960e11b1461080e5760405162461bcd60e51b815260040161080590615675565b60405180910390fd5b61081f84601063ffffffff6130a516565b915061083284602463ffffffff6130d816565b929491935050565b600080610847848461182c565b9150610853848461235f565b90509250929050565b600080600061086d846107726130e4565b6000610886600486518761302e9092919063ffffffff16565b8060200190516108999190810190614c89565b9094509250905060ff811660028111156108af57fe5b9350509193909250565b60008060006108c8858561083a565b915091506108d682826130ef565b925050505b92915050565b60006060806108f284610772613105565b835161090890859060049063ffffffff61302e16565b80602001905161091b91908101906147a7565b9196909550909350915050565b60008061093783610772613110565b825161094d90849060049063ffffffff61302e16565b806020019051610960919081019061474a565b9094909350915050565b600080606061097b8461077261311b565b6000610994600486518761302e9092919063ffffffff16565b8060200190516109a79190810190614c3e565b9094509250905060ff811660018111156108af57fe5b6000806060806109cf85610772613126565b84516109e590869060049063ffffffff61302e16565b8060200190516109f89190810190614707565b92989197509550909350915050565b600080610a1683610772613131565b6000610a2f600485518661302e9092919063ffffffff16565b806020019051610a429190810190614b7d565b9250905060ff81166003811115610a5557fe5b925050915091565b6000610a6f828263ffffffff61307116565b90506001600160e01b03198116630f47261b60e41b1415610a9a57610a9382611daf565b5050610b55565b6001600160e01b0319811663012b8bc960e11b1415610ac457610abc826107bf565b505050610b55565b6001600160e01b0319811663a7cb5fb760e01b1415610af057610ae682611e6d565b5050505050610b55565b6001600160e01b031981166394cfcdd760e01b1415610b1257610abc8261216c565b6001600160e01b0319811663619ce88560e11b1415610b3d57610b3482612225565b50505050610b55565b60405162461bcd60e51b815260040161080590615675565b5050565b606060008251905080604051908082528060200260200182016040528015610b8b578160200160208202803883390190505b50915060005b818114610bd457610bb585858381518110610ba857fe5b602002602001015161235f565b838281518110610bc157fe5b6020908102919091010152600101610b91565b505092915050565b604051606090630f47261b60e41b90610bf9908490602401614f20565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050919050565b60405160609063619ce88560e11b90610c5390869086908690602401614fc6565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915290505b9392505050565b6000806000610ca08461077261313c565b8351610cb690859060049063ffffffff61302e16565b80602001905161091b919081019061418a565b60608080806000610ce0868263ffffffff61307116565b90506001600160e01b0319811663dedfc1f160e01b1415610d2c5760405180604001604052806011815260200170626174636843616e63656c4f726465727360781b81525094506110d8565b6001600160e01b03198116634b4a520160e11b1415610d74576040518060400160405280600f81526020016e626174636846696c6c4f726465727360881b81525094506110d8565b6001600160e01b031981166323aa37f960e21b1415610dc35760405180604001604052806016815260200175626174636846696c6c4f72646572734e6f5468726f7760501b81525094506110d8565b6001600160e01b03198116632fbb8b8560e21b1415610e115760405180604001604052806015815260200174626174636846696c6c4f724b696c6c4f726465727360581b81525094506110d8565b6001600160e01b03198116632da6298760e01b1415610e55576040518060400160405280600b81526020016a31b0b731b2b627b93232b960a91b81525094506110d8565b6001600160e01b03198116634da26aab60e11b1415610e9757604051806040016040528060098152602001683334b63627b93232b960b91b81525094506110d8565b6001600160e01b03198116633852d63160e21b1415610edf576040518060400160405280600f81526020016e3334b63627b925b4b63627b93232b960891b81525094506110d8565b6001600160e01b031981166378d29ac160e01b1415610f2e57604051806040016040528060168152602001756d61726b65744275794f72646572734e6f5468726f7760501b81525094506110d8565b6001600160e01b0319811663369da09960e01b1415610f84576040518060400160405280601781526020017f6d61726b657453656c6c4f72646572734e6f5468726f7700000000000000000081525094506110d8565b6001600160e01b03198116638bc8efb360e01b1415610fda576040518060400160405280601981526020017f6d61726b65744275794f726465727346696c6c4f724b696c6c0000000000000081525094506110d8565b6001600160e01b0319811663a6c3bf3360e01b1415611030576040518060400160405280601a81526020017f6d61726b657453656c6c4f726465727346696c6c4f724b696c6c00000000000081525094506110d8565b6001600160e01b031981166388ec79fb60e01b1415611074576040518060400160405280600b81526020016a6d617463684f726465727360a81b81525094506110d8565b6001600160e01b03198116634f9559b160e01b14806110a357506001600160e01b031981166302280c9160e41b145b156110c05760405162461bcd60e51b815260040161080590615628565b60405162461bcd60e51b8152600401610805906155f1565b6001600160e01b0319811663dedfc1f160e01b141561116457855161110790879060049063ffffffff61314716565b80602001905161111a9190810190614487565b604080516000808252602082019092529195505b506040805160008082526020820190925291945061115c565b60608152602001906001900390816111475790505b5091506114ce565b6001600160e01b03198116632fbb8b8560e21b148061119357506001600160e01b03198116634b4a520160e11b145b806111ae57506001600160e01b031981166323aa37f960e21b145b156111c8576111bc866131c7565b919550935091506114ce565b6001600160e01b03198116632da6298760e01b14156112975760408051600180825281830190925290816020015b6111fe613a68565b8152602001906001900390816111f6575050865190945061122990879060049063ffffffff61314716565b80602001905161123c91908101906148cd565b8460008151811061124957fe5b6020026020010181905250600060405190808252806020026020018201604052801561112e57816020016020820280388339019050506040805160008082526020820190925291945061115c565b6001600160e01b03198116633852d63160e21b14806112c657506001600160e01b03198116634da26aab60e11b145b156112d4576111bc866131f6565b6001600160e01b031981166378d29ac160e01b148061130357506001600160e01b0319811663369da09960e01b145b8061131e57506001600160e01b03198116638bc8efb360e01b145b8061133957506001600160e01b0319811663a6c3bf3360e01b145b15611347576111bc866132f0565b6001600160e01b031981166388ec79fb60e01b14156114ce57611368613a68565b611370613a68565b60608061138a60048b518c6131479092919063ffffffff16565b80602001905161139d9190810190614a04565b604080516002808252606082019092529498509296509094509250816020015b6113c5613a68565b8152602001906001900390816113bd57905050975083886000815181106113e857fe5b6020026020010181905250828860018151811061140157fe5b602090810291909101015260408051600280825260608201909252908160200160208202803883390190505096508360a001518760008151811061144157fe5b6020026020010181815250508260a001518760018151811061145f57fe5b60209081029190910101526040805160028082526060820190925290816020015b606081526020019060019003908161148057905050955081866000815181106114a557fe5b602002602001018190525080866001815181106114be57fe5b6020026020010181905250505050505b509193509193565b6000806114e583610772613364565b82516114fb90849060049063ffffffff61302e16565b806020019051610960919081019061482a565b6000611518613afb565b6115a98584600560009054906101000a90046001600160a01b03166001600160a01b0316631ce4c78b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561156b57600080fd5b505afa15801561157f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115a39190810190614b65565b3a61336e565b60408051600280825260608281019093529293509091816020015b60608152602001906001900390816115c457505060408051600280825260608083018452939450909160208301908038833950506040805160028082526060808301845294955090925090602083019080388339505060408051600280825260608083018452949550909250906020830190803883390190505090508861014001518460008151811061165357fe5b602002602001018190525088600001518360008151811061167057fe5b60200260200101906001600160a01b031690816001600160a01b031681525050878260008151811061169e57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508460000151816000815181106116d057fe5b602002602001018181525050886101800151846001815181106116ef57fe5b602002602001018190525088600001518360018151811061170c57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505088604001518260018151811061173e57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505084604001518160018151811061177057fe5b602002602001018181525050611788848484846133e5565b9998505050505050505050565b60006117ec846117e76040518060400160405280600b81526020016a0c1e08141c9bdd1bd8dbdb60aa1b815250604051806040016040528060058152602001640332e302e360dc1b815250878761358a565b6135e1565b949350505050565b600080611803836107726135f5565b825161181990849060049063ffffffff61302e16565b8060200190516109609190810190614151565b60008061183f838263ffffffff61307116565b90506001600160e01b03198116630f47261b60e41b141561195857600061186d84601063ffffffff6130a516565b6040519091506060906370a0823160e01b9061188d908890602401614f20565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060836001600160a01b0316836040516118de9190614f04565b600060405180830381855afa9150503d8060008114611919576040519150601f19603f3d011682016040523d82523d6000602084013e61191e565b606091505b5091509150818015611931575080516020145b61193c57600061194d565b61194d81600063ffffffff6130d816565b955050505050611da8565b6001600160e01b0319811663012b8bc960e11b1415611a975760008061197d856107bf565b6040519194509250606091506331a9108f60e11b906119a09084906024016151ff565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060846001600160a01b0316836040516119f19190614f04565b600060405180830381855afa9150503d8060008114611a2c576040519150601f19603f3d011682016040523d82523d6000602084013e611a31565b606091505b50915091506000828015611a46575081516020145b611a51576000611a62565b611a6282600c63ffffffff6130a516565b9050896001600160a01b0316816001600160a01b031614611a84576000611a87565b60015b60ff169750505050505050611da8565b6001600160e01b0319811663a7cb5fb760e01b1415611c1e576000606080611abe86611e6d565b5081519296509094509250905060005b818114611c14578351606090627eeac760e11b908b90879085908110611af057fe5b6020026020010151604051602401611b09929190615030565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060876001600160a01b031683604051611b5a9190614f04565b600060405180830381855afa9150503d8060008114611b95576040519150601f19603f3d011682016040523d82523d6000602084013e611b9a565b606091505b50915091506000828015611baf575081516020145b611bba576000611bcb565b611bcb82600063ffffffff6130d816565b90506000878681518110611bdb57fe5b60200260200101518281611beb57fe5b0490508b811080611bfa57508b155b15611c0357809b505b505060019093019250611ace915050565b5050505050611da8565b6001600160e01b0319811663619ce88560e11b1415611d0a57604051606090632a17967960e21b90611c5b908690600090819081906024016153fa565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925260045491519092506000916001600160a01b031690611cad908490614f04565b600060405180830381855afa9150503d8060008114611ce8576040519150601f19603f3d011682016040523d82523d6000602084013e611ced565b606091505b5050905080611cfd576000611d01565b6000195b93505050611da8565b6001600160e01b031981166394cfcdd760e01b1415611da857606080611d2f8561216c565b80519194509250905060005b818114611da3576000611d6189858481518110611d5457fe5b602002602001015161182c565b90506000858381518110611d7157fe5b60200260200101518281611d8157fe5b04905087811080611d90575087155b15611d99578097505b5050600101611d3b565b505050505b5092915050565b600080611dc2838263ffffffff61307116565b91506001600160e01b03198216630f47261b60e41b14611df45760405162461bcd60e51b815260040161080590615675565b611e0583601063ffffffff6130a516565b9050915091565b60008060006060611e1f85610772613600565b6000611e38600487518861302e9092919063ffffffff16565b806020019051611e4b9190810190614be1565b91965094509250905060ff81166006811115611e6357fe5b9450509193509193565b60008060608080611e84868563ffffffff61307116565b94506001600160e01b0319851663a7cb5fb760e01b14611eb65760405162461bcd60e51b815260040161080590615675565b505050506024828101516044840151606485015160848601519496929591820184019490820184019391010190565b60006117ec84611f376040518060400160405280600b81526020016a0c1e08141c9bdd1bd8dbdb60aa1b815250604051806040016040528060058152602001640332e302e360dc1b815250878761358a565b61360b565b6060808251604051908082528060200260200182016040528015611f6a578160200160208202803883390190505b50905060005b83518114611da857838181518110611f8457fe5b60200260200101516001600160a01b031631828281518110611fa257fe5b6020908102919091010152600101611f70565b606060008451905080604051908082528060200260200182016040528015611fe7578160200160208202803883390190505b50915060005b81811461206f5761203886828151811061200357fe5b602002602001015186838151811061201757fe5b602002602001015186848151811061202b57fe5b60200260200101516127e9565b83828151811061204457fe5b6020026020010190600481111561205757fe5b9081600481111561206457fe5b905250600101611fed565b50509392505050565b60405160609063012b8bc960e11b906120979085908590602401615030565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905092915050565b600060608060606120e48561077261361a565b84516120fa90869060049063ffffffff61302e16565b8060200190516109f89190810190614223565b60405160609063a7cb5fb760e01b90612130908790879087908790602401614f72565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050949350505050565b6000606080612181848463ffffffff61307116565b92506001600160e01b031983166394cfcdd760e01b146121b35760405162461bcd60e51b815260040161080590615675565b83516121c990859060049063ffffffff61314716565b8060200190516121dc9190810190614691565b9395909450915050565b600060606121f683610772613625565b825161220c90849060049063ffffffff61302e16565b806020019051610960919081019061476d565b60065481565b60008060608161223b858263ffffffff61307116565b93506001600160e01b0319841663619ce88560e11b1461226d5760405162461bcd60e51b815260040161080590615675565b845161228390869060049063ffffffff61314716565b80602001905161229691908101906141cc565b9597919650949350915050565b6000806122b283610772613630565b60006122cb600485518661302e9092919063ffffffff16565b8060200190516122de9190810190614b7d565b9250905060ff81166001811115610a5557fe5b606060008251905080604051908082528060200260200182016040528015612323578160200160208202803883390190505b50915060005b818114610bd45761234085858381518110611d5457fe5b83828151811061234c57fe5b6020908102919091010152600101612329565b600080612372838263ffffffff61307116565b90506001600160e01b031981166394cfcdd760e01b141561240b576060806123998561216c565b80519194509250905060005b8181146124005760006123be89858481518110610ba857fe5b905060008583815181106123ce57fe5b602002602001015182816123de57fe5b049050878110806123ed575087155b156123f6578097505b50506001016123a5565b506108db9350505050565b6001600160e01b03198116630f47261b60e41b141561246457600061243784601063ffffffff6130a516565b600154604051919250606091636eb1769f60e11b9161188d9189916001600160a01b031690602401614f34565b6001600160e01b0319811663012b8bc960e11b141561269757600080612489856107bf565b6002546040519295509093506060925063e985e9c560e01b916124bc918a916001600160a01b0390911690602401614f34565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060846001600160a01b03168360405161250d9190614f04565b600060405180830381855afa9150503d8060008114612548576040519150601f19603f3d011682016040523d82523d6000602084013e61254d565b606091505b509150915081158061256157508051602014155b8061257d575061257881600063ffffffff6130d816565b600114155b156126885760405160609063020604bf60e21b9061259f9087906024016151ff565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050856001600160a01b0316816040516125ec9190614f04565b600060405180830381855afa9150503d8060008114612627576040519150601f19603f3d011682016040523d82523d6000602084013e61262c565b606091505b509093509150828015612640575081516020145b801561266f57506002546001600160a01b031661266483600c63ffffffff6130a516565b6001600160a01b0316145b61267a57600061267d565b60015b60ff16975050611c14565b60001996505050505050611da8565b6001600160e01b0319811663a7cb5fb760e01b14156127c55760006126bb84611e6d565b50506003546040519294506060935063e985e9c560e01b926126ec925089916001600160a01b031690602401614f34565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060836001600160a01b03168360405161273d9190614f04565b600060405180830381855afa9150503d8060008114612778576040519150601f19603f3d011682016040523d82523d6000602084013e61277d565b606091505b5091509150818015612790575080516020145b80156127ac57506127a881600063ffffffff6130d816565b6001145b6127b757600061194d565b600019955050505050611da8565b6001600160e01b0319811663619ce88560e11b1415611da857506000199392505050565b60006127f3613afb565b6128468584600560009054906101000a90046001600160a01b03166001600160a01b0316631ce4c78b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561156b57600080fd5b60408051600480825260a0820190925291925060609190816020015b606081526020019060019003908161286257505060408051600480825260a082019092529192506060919060208201608080388339505060408051600480825260a08201909252929350606092915060208201608080388339505060408051600480825260a08201909252929350606092915060208201608080388339019050509050886101600151846000815181106128f857fe5b6020026020010181905250878360008151811061291157fe5b60200260200101906001600160a01b031690816001600160a01b03168152505088600001518260008151811061294357fe5b60200260200101906001600160a01b031690816001600160a01b031681525050868160008151811061297157fe5b6020026020010181815250508861014001518460018151811061299057fe5b60200260200101819052508860000151836001815181106129ad57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505087826001815181106129db57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050846000015181600181518110612a0d57fe5b602002602001018181525050886101a0015184600281518110612a2c57fe5b60200260200101819052508783600281518110612a4557fe5b60200260200101906001600160a01b031690816001600160a01b031681525050886040015182600281518110612a7757fe5b60200260200101906001600160a01b031690816001600160a01b031681525050846060015181600281518110612aa957fe5b60200260200101818152505088610180015184600381518110612ac857fe5b6020026020010181905250886000015183600381518110612ae557fe5b60200260200101906001600160a01b031690816001600160a01b031681525050886040015182600381518110612b1757fe5b60200260200101906001600160a01b031690816001600160a01b03168152505084604001518160038151811061177057fe5b6040516060906394cfcdd760e01b9061209790859085906024016151ac565b6000612b7a828263ffffffff61307116565b90506001600160e01b03198116630f47261b60e41b1480612bab57506001600160e01b0319811663012b8bc960e11b145b80612bc657506001600160e01b0319811663a7cb5fb760e01b145b80612be157506001600160e01b031981166394cfcdd760e01b145b80612bfc57506001600160e01b0319811663619ce88560e11b145b612c185760405162461bcd60e51b815260040161080590615675565b919050565b606080606060008551905080604051908082528060200260200182016040528015612c6257816020015b612c4f613b2a565b815260200190600190039081612c475790505b50935080604051908082528060200260200182016040528015612c8f578160200160208202803883390190505b50925080604051908082528060200260200182016040528015612cbc578160200160208202803883390190505b50915060005b818114612d4c57612cf9878281518110612cd857fe5b6020026020010151878381518110612cec57fe5b6020026020010151612d6e565b8751889085908110612d0757fe5b60200260200101878581518110612d1a57fe5b60200260200101878681518110612d2d57fe5b9315156020948502919091019093019290925291905252600101612cc2565b50509250925092565b606080612d6284846122f1565b91506108538484610b59565b612d76613b2a565b600554604051639d3fa4b960e01b815260009182916001600160a01b0390911690639d3fa4b990612dab9088906004016156c1565b60606040518083038186803b158015612dc357600080fd5b505afa158015612dd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612dfb9190810190614885565b855160055460405163a12dcc6f60e01b815292955090916001600160a01b039091169063a12dcc6f90612e3490899089906004016156d4565b60206040518083038186803b158015612e4c57600080fd5b505afa158015612e60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612e8491908101906146e7565b91506000612e97828861014001516108b9565b60a088015160c08901516101808a01516101408b015193945091929091600091612ec69163ffffffff61363b16565b15612ef357612eec84612ee6848d6080015161366090919063ffffffff16565b8561367c565b9050612f4c565b81612f0757612eec848b608001518561367c565b6000612f18868c61018001516108b9565b90506000612f2b868d608001518761367c565b90506000612f3a83868861367c565b9050612f4682826130ef565b93505050505b612f6c612f6689604001518561369e90919063ffffffff16565b826130ef565b96506004612f7f8b8c602001518a61150e565b6004811115612f8a57fe5b14612f96576000612f98565b865b965050505050509250925092565b6000806000612fb7846107726136bd565b6000612fd0600486518761302e9092919063ffffffff16565b8060200190516108999190810190614baa565b63fdb6ca8d60e01b90565b6000612ffb836000613071565b90506001600160e01b0319808216908316146130295760405162461bcd60e51b81526004016108059061564f565b505050565b60608183111561304c5761304c613047600085856136c8565b6136e7565b83518211156130655761306561304760018487516136c8565b50819003910190815290565b600081600401835110156130925761309261304760038551856004016136c8565b5001602001516001600160e01b03191690565b600081601401835110156130c6576130c661304760048551856014016136c8565b5001601401516001600160a01b031690565b6000610c8883836136ef565b6318e4b14160e01b90565b60008183106130fe5781610c88565b5090919050565b634678472b60e01b90565b63b6555d6f60e01b90565b6324410cd360e11b90565b631b8388f760e01b90565b630e94a7ed60e41b90565b634ad3127560e01b90565b60608183111561316057613160613047600085856136c8565b83518211156131795761317961304760018487516136c8565b8282036040519080825280601f01601f1916602001820160405280156131a6576020820181803883390190505b509050610c886131b582613719565b846131bf87613719565b01835161371f565b60608060606131e360048551866131479092919063ffffffff16565b80602001905161091b9190810190614592565b60408051600180825281830190925260609182918291816020015b613219613a68565b8152602001906001900390816132115750506040805160018082528183019092529194506020808301908038833901905050604080516001808252818301909252919350816020015b6060815260200190600190039081613262575050845190915061328f90859060049063ffffffff61314716565b8060200190516132a29190810190614a5c565b856000815181106132af57fe5b60200260200101856000815181106132c357fe5b60200260200101856000815181106132d757fe5b6020908102919091010192909252919052529193909250565b60408051600180825281830190925260609182918291602080830190803883395050855191935061332c9186915060049063ffffffff61314716565b80602001905161333f919081019061460b565b8451859060009061334c57fe5b60209081029190910101919091529095929450925050565b628e3db960e51b90565b613376613afb565b6020810184905260a085015160808601516133929186916137c4565b815260a085015160c08601516133a99186916137c4565b604082015260a085015160e08601516133c39186916137c4565b60608201526133d8828463ffffffff6137f816565b6080820152949350505050565b60405160009060609063b04fbddd60e01b9061340b908890889088908890602401615049565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925260055491519092506060916001600160a01b03169061345d908490614f04565b6000604051808303816000865af19150503d806000811461349a576040519150601f19603f3d011682016040523d82523d6000602084013e61349f565b606091505b509150600090506134b6828263ffffffff61307116565b90506134c061311b565b6001600160e01b0319828116911614156134fd5760006134df8361096a565b5091505060ff811660048111156134f257fe5b9450505050506117ec565b613505613105565b6001600160e01b031982811691161415613538576000613524836108e1565b509091505060ff811660048111156134f257fe5b815160208301207ff43f26ea5a94b478394a975e856464913dc1a8a1ca70939d974aa7c238aa0ce0141561357257600493505050506117ec565b60405162461bcd60e51b8152600401610805906155c4565b8351602094850120835193850193909320604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f815295860194909452928401929092526060830152608082015260a0902090565b6000610c88826135f085613829565b6138a4565b6350ae068360e11b90565b630fcb446360e31b90565b6000610c88826135f0856138c3565b635bd0428d60e01b90565b6320d11f6160e01b90565b633d66146160e21b90565b600081518351148015610c885750508051602091820120825192909101919091201490565b600082820183811015610c8857610c886130476000868661397c565b60006117ec83613692868563ffffffff6137f816565b9063ffffffff61399b16565b6000828211156136b7576136b76130476002858561397c565b50900390565b631ca78ed960e31b90565b6060632800659560e01b848484604051602401610c53939291906154cf565b805160208201fd5b600081602001835110156137105761371061304760058551856020016136c8565b50016020015190565b60200190565b6020811015613749576001816020036101000a038019835116818551168082178652505050613029565b8282141561375657613029565b828211156137905760208103905080820181840181515b8285101561378857845186526020958601959094019361376d565b905250613029565b60208103905080820181840183515b818612156137bb5782518252601f19928301929091019061379f565b85525050505050565b60006137d18484846139c5565b156137e4576137e4613047858585613a2b565b6117ec83613692868563ffffffff6137f816565b600082613807575060006108db565b8282028284828161381457fe5b0414610c8857610c886130476001868661397c565b608081810151825160208085015160408087015160609788015186519685019690962082517fec69816980a3a3ca4554410e60253953e9ff375ba4536a98adfa15cc7154150881529485019590955290830191909152948101949094526001600160a01b039091169183019190915260a082015260c0902090565b60405161190160f01b8152600281019290925260228201526042902090565b6101408101516101608201516101808301516101a08401516000937ff80322eb8376aafb64eadf8f0d7623f22130fd9491a221e902b713cb984a75349390929091602087101561390f57fe5b601f1987018051610140890180516101608b0180516101808d0180516101a08f0180519d89528c5160209d8e012087528b519b8d019b909b2084528951998c01999099208152875197909a019690962088526101e085209390945290529190529252919091529050919050565b606063e946c1bb60e01b848484604051602401610c5393929190615460565b6000816139b1576139b16130476003858561397c565b60008284816139bc57fe5b04949350505050565b6000826139d7576139d7613047613a4a565b8115806139e2575083155b156139ef57506000610c88565b600083806139f957fe5b8584099050613a0e858463ffffffff6137f816565b613a20826103e863ffffffff6137f816565b101595945050505050565b606063339f3de260e01b848484604051602401610c53939291906156f9565b60408051808201909152600481526329e460df60e21b602082015290565b604051806101c0016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001606081525090565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6040805160608101909152806000815260006020820181905260409091015290565b80356108db816157d2565b80516108db816157d2565b600082601f830112613b72578081fd5b8135613b85613b8082615735565b61570f565b818152915060208083019084810181840286018201871015613ba657600080fd5b60005b84811015611da3578135613bbc816157d2565b84529282019290820190600101613ba9565b600082601f830112613bde578081fd5b8151613bec613b8082615735565b8181529150602080830190840160005b83811015613c2957613c148760208451890101613e4e565b83526020928301929190910190600101613bfc565b5050505092915050565b600082601f830112613c43578081fd5b8135613c51613b8082615735565b8181529150602080830190840160005b83811015613c2957613c798760208435890101613e00565b83526020928301929190910190600101613c61565b600082601f830112613c9e578081fd5b8151613cac613b8082615735565b8181529150602080830190840160005b83811015613c2957613cd48760208451890101613fe2565b83526020928301929190910190600101613cbc565b600082601f830112613cf9578081fd5b8135613d07613b8082615735565b8181529150602080830190840160005b83811015613c2957613d2f8760208435890101613e94565b83526020928301929190910190600101613d17565b600082601f830112613d54578081fd5b8151613d62613b8082615735565b818152915060208083019084810181840286018201871015613d8357600080fd5b60005b84811015611da357815184529282019290820190600101613d86565b600082601f830112613db2578081fd5b8135613dc0613b8082615735565b818152915060208083019084810181840286018201871015613de157600080fd5b60005b84811015611da357813584529282019290820190600101613de4565b600082601f830112613e10578081fd5b8135613e1e613b8082615754565b9150808252836020828501011115613e3557600080fd5b8060208401602084013760009082016020015292915050565b600082601f830112613e5e578081fd5b8151613e6c613b8082615754565b9150808252836020828501011115613e8357600080fd5b611da8816020840160208601615777565b60006101c0808385031215613ea7578182fd5b613eb08161570f565b915050613ebd8383613b4c565b8152613ecc8360208401613b4c565b6020820152613ede8360408401613b4c565b6040820152613ef08360608401613b4c565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e0820152610100808301358183015250610120808301358183015250610140808301356001600160401b0380821115613f5157600080fd5b613f5d86838701613e00565b83850152610160925082850135915080821115613f7957600080fd5b613f8586838701613e00565b83850152610180925082850135915080821115613fa157600080fd5b613fad86838701613e00565b838501526101a0925082850135915080821115613fc957600080fd5b50613fd685828601613e00565b82840152505092915050565b60006101c0808385031215613ff5578182fd5b613ffe8161570f565b91505061400b8383613b57565b815261401a8360208401613b57565b602082015261402c8360408401613b57565b604082015261403e8360608401613b57565b60608201526080820151608082015260a082015160a082015260c082015160c082015260e082015160e0820152610100808301518183015250610120808301518183015250610140808301516001600160401b038082111561409f57600080fd5b6140ab86838701613e4e565b838501526101609250828501519150808211156140c757600080fd5b6140d386838701613e4e565b838501526101809250828501519150808211156140ef57600080fd5b6140fb86838701613e4e565b838501526101a092508285015191508082111561411757600080fd5b50613fd685828601613e4e565b805160ff811681146108db57600080fd5b600060208284031215614146578081fd5b8135610c88816157d2565b60008060408385031215614163578081fd5b825161416e816157d2565b602084015190925061417f816157d2565b809150509250929050565b60008060006060848603121561419e578081fd5b83516141a9816157d2565b60208501519093506141ba816157d2565b80925050604084015190509250925092565b6000806000606084860312156141e0578081fd5b83516141eb816157d2565b60208501519093506001600160401b03811115614206578182fd5b61421286828701613e4e565b925050604084015190509250925092565b60008060008060808587031215614238578182fd5b8451614243816157d2565b60208601519094506001600160401b038082111561425f578384fd5b61426b88838901613e4e565b94506040870151915080821115614280578384fd5b61428c88838901613e4e565b935060608701519150808211156142a1578283fd5b506142ae87828801613e4e565b91505092959194509250565b600080604083850312156142cc578182fd5b82356142d7816157d2565b915060208301356001600160401b038111156142f1578182fd5b6142fd85828601613c33565b9150509250929050565b6000806000806080858703121561431c578182fd5b8435614327816157d2565b935060208501356001600160401b0380821115614342578384fd5b61434e88838901613da2565b94506040870135915080821115614363578384fd5b61436f88838901613da2565b93506060870135915080821115614384578283fd5b506142ae87828801613e00565b600080604083850312156143a3578182fd5b82356143ae816157d2565b915060208301356001600160401b038111156143c8578182fd5b6142fd85828601613e00565b6000806000606084860312156143e8578081fd5b83356143f3816157d2565b925060208401356001600160401b0381111561440d578182fd5b61441986828701613e00565b925050604084013590509250925092565b6000806040838503121561443c578182fd5b8235614447816157d2565b946020939093013593505050565b600060208284031215614466578081fd5b81356001600160401b0381111561447b578182fd5b6117ec84828501613b62565b600060208284031215614498578081fd5b81516001600160401b038111156144ad578182fd5b6117ec84828501613c8e565b6000806000606084860312156144cd578081fd5b83356001600160401b03808211156144e3578283fd5b6144ef87838801613ce9565b94506020860135915080821115614504578283fd5b61451087838801613b62565b93506040860135915080821115614525578283fd5b5061453286828701613da2565b9150509250925092565b6000806040838503121561454e578182fd5b82356001600160401b0380821115614564578384fd5b61457086838701613ce9565b93506020850135915080821115614585578283fd5b506142fd85828601613c33565b6000806000606084860312156145a6578081fd5b83516001600160401b03808211156145bc578283fd5b6145c887838801613c8e565b945060208601519150808211156145dd578283fd5b6145e987838801613d44565b935060408601519150808211156145fe578283fd5b5061453286828701613bce565b60008060006060848603121561461f578081fd5b83516001600160401b0380821115614635578283fd5b61464187838801613c8e565b94506020860151935060408601519150808211156145fe578283fd5b6000806040838503121561466f578182fd5b82356001600160401b0380821115614685578384fd5b61457086838701613da2565b600080604083850312156146a3578182fd5b82516001600160401b03808211156146b9578384fd5b6146c586838701613d44565b935060208501519150808211156146da578283fd5b506142fd85828601613bce565b6000602082840312156146f8578081fd5b81518015158114610c88578182fd5b6000806000806080858703121561471c578182fd5b84519350602085015161472e816157d2565b60408601519093506001600160401b0380821115614280578384fd5b6000806040838503121561475c578182fd5b505080516020909101519092909150565b6000806040838503121561477f578182fd5b8251915060208301516001600160401b0381111561479b578182fd5b6142fd85828601613e4e565b6000806000606084860312156147bb578081fd5b8351925060208401516001600160401b03808211156147d8578283fd5b6147e487838801613e4e565b935060408601519150808211156147f9578283fd5b5061453286828701613e4e565b60008060408385031215614818578182fd5b82519150602083015161417f816157e7565b6000806040838503121561483c578182fd5b82516001600160e01b03198116811461416e578283fd5b600060208284031215614864578081fd5b81356001600160401b03811115614879578182fd5b6117ec84828501613e00565b600060608284031215614896578081fd5b6148a0606061570f565b8251600781106148ae578283fd5b8152602083810151908201526040928301519281019290925250919050565b6000602082840312156148de578081fd5b81516001600160401b038111156148f3578182fd5b6117ec84828501613fe2565b600080600060608486031215614913578081fd5b83356001600160401b03811115614928578182fd5b61493486828701613e94565b9350506020840135614945816157d2565b929592945050506040919091013590565b60008060408385031215614968578182fd5b82356001600160401b038082111561497e578384fd5b61498a86838701613e94565b9350602085013591508082111561499f578283fd5b506142fd85828601613e00565b6000806000606084860312156149c0578081fd5b83356001600160401b038111156149d5578182fd5b6149e186828701613e94565b9350506020840135915060408401356149f9816157d2565b809150509250925092565b60008060008060808587031215614a19578182fd5b84516001600160401b0380821115614a2f578384fd5b614a3b88838901613fe2565b95506020870151915080821115614a50578384fd5b61426b88838901613fe2565b600080600060608486031215614a70578081fd5b83516001600160401b0380821115614a86578283fd5b614a9287838801613fe2565b94506020860151935060408601519150808211156147f9578283fd5b600080600060608486031215614ac2578081fd5b83356001600160401b0380821115614ad8578283fd5b81860160a08189031215614aea578384fd5b614af460a061570f565b9250803583526020810135602084015260408101356040840152614b1b8860608301613b4c565b6060840152608081013582811115614b31578485fd5b614b3d89828401613e00565b608085015250919450505060208401359150614b5c8560408601613b4c565b90509250925092565b600060208284031215614b76578081fd5b5051919050565b60008060408385031215614b8f578182fd5b8251614b9a816157e7565b6020939093015192949293505050565b600080600060608486031215614bbe578081fd5b8351614bc9816157e7565b6020850151604086015191945092506149f9816157d2565b60008060008060808587031215614bf6578182fd5b614c008686614124565b9350602085015192506040850151614c17816157d2565b60608601519092506001600160401b03811115614c32578182fd5b6142ae87828801613e4e565b600080600060608486031215614c52578081fd5b614c5c8585614124565b92506020840151915060408401516001600160401b03811115614c7d578182fd5b61453286828701613e4e565b600080600060608486031215614c9d578081fd5b614ca78585614124565b925060208401519150604084015190509250925092565b1515815260200190565b6000614cd48383614de1565b505060600190565b6001600160a01b03169052565b6000815180845260208401935060208301825b82811015614d235781516001600160a01b0316865260209586019590910190600101614cfc565b5093949350505050565b600081518084526020840180819550602083028101915060208501845b84811015614d78578284038852614d62848351614db5565b6020988901989094509190910190600101614d4a565b50919695505050505050565b6000815180845260208401935060208301825b82811015614d23578151865260209586019590910190600101614d97565b60008151808452614dcd816020860160208601615777565b601f01601f19169290920160200192915050565b8051614dec816157c8565b825260208181015190830152604090810151910152565b60006101c0614e13848451614cdc565b6020830151614e256020860182614cdc565b506040830151614e386040860182614cdc565b506060830151614e4b6060860182614cdc565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e0850152610100808401518186015250610120808401518186015250610140808401518282870152614ea483870182614db5565b91505061016091508184015185820383870152614ec18282614db5565b925050506101808084015185830382870152614edd8382614db5565b9150506101a091508184015185820383870152614efa8282614db5565b9695505050505050565b60008251614f16818460208701615777565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0385168152608060208201819052600090614f9690830186614d84565b8281036040840152614fa88186614d84565b8381036060850152614fba8186614db5565b98975050505050505050565b6001600160a01b0384168152606060208201819052600090614fea90830185614db5565b9050826040830152949350505050565b6001600160a01b038516815260806020820181905260009061501e90830186614db5565b8281036040840152614fa88186614db5565b6001600160a01b03929092168252602082015260400190565b60006080825261505c6080830187614d2d565b828103602084015261506e8187614ce9565b83810360408501526150808187614ce9565b91505082810360608401526150958185614d84565b979650505050505050565b602080825282518282018190526000918401906040840190835b818110156150e2578351600581106150ce57fe5b8352602093840193909201916001016150ba565b509095945050505050565b6000606082016060835280865161510481846151ff565b9150602088019250835b8181101561513257615121838551614cc8565b60209490940193925060010161510e565b505083810360208501526151468187614d84565b915050828103604084015280845161515e81846151ff565b9150602086019250835b8181101561518c5761517b838551614cbe565b602094909401939250600101615168565b5090979650505050505050565b600060208252610c886020830184614d84565b6000604082526151bf6040830185614d84565b82810360208401526151d18185614d2d565b95945050505050565b6000604082526151ed6040830185614d84565b82810360208401526151d18185614d84565b90815260200190565b8481526001600160a01b038416602082015260806040820181905260009061523290830185614db5565b82810360608401526150958185614db5565b918252602082015260400190565b6000838252604060208301526117ec6040830184614db5565b6000848252606060208301526152846060830185614db5565b8281036040840152614efa8185614db5565b828152604081016152a6836157c8565b8260208301529392505050565b6001600160e01b031991909116815260200190565b6001600160e01b03199290921682526001600160a01b0316602082015260400190565b6001600160e01b0319861681526001600160a01b038516602082015260a06040820181905260009061531f90830186614d84565b82810360608401526153318186614d84565b83810360808501526117888186614db5565b6001600160e01b0319851681526001600160a01b038416602082015260806040820181905260009061537790830185614db5565b905082606083015295945050505050565b6001600160e01b03199390931683526001600160a01b03919091166020830152604082015260600190565b600063ffffffff60e01b85168252606060208301526153d56060830185614d84565b8281036040840152614efa8185614d2d565b600060208252610c886020830184614db5565b60006080825261540d6080830187614db5565b6001600160a01b03958616602084015293909416604082015260ff9190911660609091015292915050565b6000615443856157a7565b848252836020830152606060408301526151d16060830184614db5565b6060810161546d856157b4565b938152602081019290925260409091015290565b6060810161548e856157be565b93815260208101929092526001600160a01b031660409091015290565b604081016154b8846157b4565b9281526020015290565b6060810161546d856157be565b606081016008851061546d57fe5b60208101600583106154eb57fe5b91905290565b60006154fc866157c8565b858252602082018590526001600160a01b0384166040830152608060608301819052614efa90830184614db5565b604081016154b8846157a7565b60006080825261554a6080830187614db5565b602083820381850152818751808452828401915082838202850101838a01865b8381101561559857601f19878403018552615586838351614e03565b9486019492509085019060010161556a565b505086810360408801526155ac818a614d84565b94505050505082810360608401526150958185614d2d565b602080825260139082015272554e4b4e4f574e5f52455455524e5f4441544160681b604082015260600190565b60208082526019908201527f554e4b4e4f574e5f46554e4354494f4e5f53454c4543544f5200000000000000604082015260600190565b6020808252600d908201526c15539253541311535153951151609a1b604082015260600190565b6020808252600c908201526b2120a22fa9a2a622a1aa27a960a11b604082015260600190565b6020808252600e908201526d15d493d391d7d41493d61657d25160921b604082015260600190565b60a081016156ab8286614de1565b8360608301528215156080830152949350505050565b600060208252610c886020830184614e03565b6000604082526156e76040830185614e03565b82810360208401526151d18185614db5565b9283526020830191909152604082015260600190565b6040518181016001600160401b038111828210171561572d57600080fd5b604052919050565b60006001600160401b0382111561574a578081fd5b5060209081020190565b60006001600160401b03821115615769578081fd5b50601f01601f191660200190565b60005b8381101561579257818101518382015260200161577a565b838111156157a1576000848401525b50505050565b600281106157b157fe5b50565b600481106157b157fe5b600381106157b157fe5b600781106157b157fe5b6001600160a01b03811681146157b157600080fd5b60ff811681146157b157600080fdfea365627a7a72315820ffa7410ae8ac1618f6d2406caae09db56a6e970aba5c127522015bc46216cddd6c6578706572696d656e74616cf564736f6c63430005100040" } } }, "compiler": { "name": "solc", - "version": "soljson-v0.5.15+commit.6a57276f.js", + "version": "soljson-v0.5.16+commit.9c3226ce.js", "settings": { "optimizer": { "enabled": true, @@ -1066,7 +1066,7 @@ ] } }, - "evmVersion": "constantinople" + "evmVersion": "istanbul" } }, "chains": {} diff --git a/packages/contract-artifacts/artifacts/DummyERC20Token.json b/packages/contract-artifacts/artifacts/DummyERC20Token.json index e300bb9c7c..ee5c6b5fe9 100644 --- a/packages/contract-artifacts/artifacts/DummyERC20Token.json +++ b/packages/contract-artifacts/artifacts/DummyERC20Token.json @@ -24,6 +24,15 @@ "name": "Approval", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, + { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } + ], + "name": "OwnershipTransferred", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -227,21 +236,25 @@ "_value": "Amount to transfer." }, "return": "Success of transfer." + }, + "transferOwnership(address)": { + "details": "Change the owner of this contract.", + "params": { "newOwner": "New owner address." } } } }, "evm": { "bytecode": { - "object": "0x60806040523480156200001157600080fd5b506040516200114438038062001144833981810160405260808110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b9083019060208201858111156200006e57600080fd5b82516401000000008111828201881017156200008957600080fd5b82525081516020918201929091019080838360005b83811015620000b85781810151838201526020016200009e565b50505050905090810190601f168015620000e65780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200010a57600080fd5b9083019060208201858111156200012057600080fd5b82516401000000008111828201881017156200013b57600080fd5b82525081516020918201929091019080838360005b838110156200016a57818101518382015260200162000150565b50505050905090810190601f168015620001985780820380516001836020036101000a031916815260200191505b5060409081526020828101519290910151600080546001600160a01b0319163317905586519294509250620001d39160049187019062000209565b508251620001e990600590602086019062000209565b506006919091553360009081526001602052604090205550620002ae9050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200024c57805160ff19168380011785556200027c565b828001600101855582156200027c579182015b828111156200027c5782518255916020019190600101906200025f565b506200028a9291506200028e565b5090565b620002ab91905b808211156200028a576000815560010162000295565b90565b610e8680620002be6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806395d89b411161008c578063dd62ed3e11610066578063dd62ed3e146102e2578063e30443bc1461031d578063f2fde38b14610356578063fa9b701814610389576100ea565b806395d89b4114610282578063a0712d681461028a578063a9059cbb146102a9576100ea565b806323b872dd116100c857806323b872dd146101d3578063313ce5671461021657806370a082311461021e5780638da5cb5b14610251576100ea565b806306fdde03146100ef578063095ea7b31461016c57806318160ddd146101b9575b600080fd5b6100f7610391565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610131578181015183820152602001610119565b50505050905090810190601f16801561015e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101a56004803603604081101561018257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561043d565b604080519115158252519081900360200190f35b6101c16104b0565b60408051918252519081900360200190f35b6101a5600480360360608110156101e957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356104b6565b6101c1610772565b6101c16004803603602081101561023457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610778565b6102596107a0565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6100f76107bc565b6102a7600480360360208110156102a057600080fd5b5035610835565b005b6101a5600480360360408110156102bf57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356108bb565b6101c1600480360360408110156102f857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610a4a565b6102a76004803603604081101561033357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610a82565b6102a76004803603602081101561036c57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610b18565b6101c1610b95565b6004805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156104355780601f1061040a57610100808354040283529160200191610435565b820191906000526020600020905b81548152906001019060200180831161041857829003601f168201915b505050505081565b33600081815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b60035490565b73ffffffffffffffffffffffffffffffffffffffff83166000818152600260209081526040808320338452825280832054938352600190915281205490919083111561056357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f45524332305f494e53554646494349454e545f42414c414e4345000000000000604482015290519081900360640190fd5b828110156105d257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f45524332305f494e53554646494349454e545f414c4c4f57414e434500000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020526040902054838101101561066857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f55494e543235365f4f564552464c4f5700000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020526040808220805487019055918716815220805484900390557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156107025773ffffffffffffffffffffffffffffffffffffffff851660009081526002602090815260408083203384529091529020805484900390555b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3506001949350505050565b60065481565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205490565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b6005805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156104355780601f1061040a57610100808354040283529160200191610435565b69021e19e0c9bab24000008111156108ae57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f56414c55455f544f4f5f4c415247450000000000000000000000000000000000604482015290519081900360640190fd5b6108b83382610ba3565b50565b3360009081526001602052604081205482111561093957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f45524332305f494e53554646494349454e545f42414c414e4345000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602052604090205482810110156109cf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f55494e543235365f4f564552464c4f5700000000000000000000000000000000604482015290519081900360640190fd5b3360008181526001602090815260408083208054879003905573ffffffffffffffffffffffffffffffffffffffff871680845292819020805487019055805186815290519293927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020908152604080832093909416825291909152205490565b610a8a610c5c565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205480821015610ad557610acd600354610ac88385610ca5565b610ca5565b600355610aee565b610aea600354610ae58484610ca5565b610cc4565b6003555b5073ffffffffffffffffffffffffffffffffffffffff909116600090815260016020526040902055565b610b20610c5c565b73ffffffffffffffffffffffffffffffffffffffff8116610b5057610b4b610b46610ce7565b610d1e565b6108b8565b6000805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff000000000000000000000000000000000000000090911617905550565b69021e19e0c9bab240000081565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902054610bd4908290610cc4565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040902055600354610c079082610cc4565b60035560408051828152905173ffffffffffffffffffffffffffffffffffffffff8416916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610ca357600054610ca390610b4690339073ffffffffffffffffffffffffffffffffffffffff16610d26565b565b600082821115610cbe57610cbe610b4660028585610db2565b50900390565b600082820183811015610ce057610ce0610b4660008686610db2565b9392505050565b60408051808201909152600481527fe69edc3e00000000000000000000000000000000000000000000000000000000602082015290565b805160208201fd5b6040805173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044808301919091528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1de45ad10000000000000000000000000000000000000000000000000000000017905292915050565b606063e946c1bb60e01b84848460405160240180846003811115610dd257fe5b60ff1681526020018381526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050939250505056fea265627a7a7231582089c03e503c77db7069bea8a94ec1c47ee5201d8bdb53857e70a882a1130e1ac364736f6c634300050c0032" + "object": "0x60806040523480156200001157600080fd5b506040516200119538038062001195833981810160405260808110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b9083019060208201858111156200006e57600080fd5b82516401000000008111828201881017156200008957600080fd5b82525081516020918201929091019080838360005b83811015620000b85781810151838201526020016200009e565b50505050905090810190601f168015620000e65780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200010a57600080fd5b9083019060208201858111156200012057600080fd5b82516401000000008111828201881017156200013b57600080fd5b82525081516020918201929091019080838360005b838110156200016a57818101518382015260200162000150565b50505050905090810190601f168015620001985780820380516001836020036101000a031916815260200191505b5060409081526020828101519290910151600080546001600160a01b0319163317905586519294509250620001d39160049187019062000209565b508251620001e990600590602086019062000209565b506006919091553360009081526001602052604090205550620002ae9050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200024c57805160ff19168380011785556200027c565b828001600101855582156200027c579182015b828111156200027c5782518255916020019190600101906200025f565b506200028a9291506200028e565b5090565b620002ab91905b808211156200028a576000815560010162000295565b90565b610ed780620002be6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806395d89b411161008c578063dd62ed3e11610066578063dd62ed3e146102e2578063e30443bc1461031d578063f2fde38b14610356578063fa9b701814610389576100ea565b806395d89b4114610282578063a0712d681461028a578063a9059cbb146102a9576100ea565b806323b872dd116100c857806323b872dd146101d3578063313ce5671461021657806370a082311461021e5780638da5cb5b14610251576100ea565b806306fdde03146100ef578063095ea7b31461016c57806318160ddd146101b9575b600080fd5b6100f7610391565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610131578181015183820152602001610119565b50505050905090810190601f16801561015e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101a56004803603604081101561018257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561043d565b604080519115158252519081900360200190f35b6101c16104b0565b60408051918252519081900360200190f35b6101a5600480360360608110156101e957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356104b6565b6101c1610772565b6101c16004803603602081101561023457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610778565b6102596107a0565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6100f76107bc565b6102a7600480360360208110156102a057600080fd5b5035610835565b005b6101a5600480360360408110156102bf57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356108bb565b6101c1600480360360408110156102f857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610a4a565b6102a76004803603604081101561033357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610a82565b6102a76004803603602081101561036c57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610b32565b6101c1610bda565b6004805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156104355780601f1061040a57610100808354040283529160200191610435565b820191906000526020600020905b81548152906001019060200180831161041857829003601f168201915b505050505081565b33600081815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b60035490565b73ffffffffffffffffffffffffffffffffffffffff83166000818152600260209081526040808320338452825280832054938352600190915281205490919083111561056357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f45524332305f494e53554646494349454e545f42414c414e4345000000000000604482015290519081900360640190fd5b828110156105d257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f45524332305f494e53554646494349454e545f414c4c4f57414e434500000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020526040902054838101101561066857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f55494e543235365f4f564552464c4f5700000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020526040808220805487019055918716815220805484900390557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156107025773ffffffffffffffffffffffffffffffffffffffff851660009081526002602090815260408083203384529091529020805484900390555b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3506001949350505050565b60065481565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205490565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b6005805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156104355780601f1061040a57610100808354040283529160200191610435565b69021e19e0c9bab24000008111156108ae57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f56414c55455f544f4f5f4c415247450000000000000000000000000000000000604482015290519081900360640190fd5b6108b83382610be8565b50565b3360009081526001602052604081205482111561093957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f45524332305f494e53554646494349454e545f42414c414e4345000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602052604090205482810110156109cf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f55494e543235365f4f564552464c4f5700000000000000000000000000000000604482015290519081900360640190fd5b3360008181526001602090815260408083208054879003905573ffffffffffffffffffffffffffffffffffffffff871680845292819020805487019055805186815290519293927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020908152604080832093909416825291909152205490565b610a8a610cad565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205480821015610ae257610ada610acb828463ffffffff610cf616565b6003549063ffffffff610cf616565b600355610b08565b610b04610af5838363ffffffff610cf616565b6003549063ffffffff610d1516565b6003555b5073ffffffffffffffffffffffffffffffffffffffff909116600090815260016020526040902055565b610b3a610cad565b73ffffffffffffffffffffffffffffffffffffffff8116610b6a57610b65610b60610d38565b610d6f565b6108b8565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b69021e19e0c9bab240000081565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902054610c1f90829063ffffffff610d1516565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040902055600354610c58908263ffffffff610d1516565b60035560408051828152905173ffffffffffffffffffffffffffffffffffffffff8416916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610cf457600054610cf490610b6090339073ffffffffffffffffffffffffffffffffffffffff16610d77565b565b600082821115610d0f57610d0f610b6060028585610e03565b50900390565b600082820183811015610d3157610d31610b6060008686610e03565b9392505050565b60408051808201909152600481527fe69edc3e00000000000000000000000000000000000000000000000000000000602082015290565b805160208201fd5b6040805173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044808301919091528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1de45ad10000000000000000000000000000000000000000000000000000000017905292915050565b606063e946c1bb60e01b84848460405160240180846003811115610e2357fe5b60ff1681526020018381526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050939250505056fea265627a7a7231582068363eaaf6157fb6d8a621bf297ac36a69731cbdca3d7856b87e498da471edf264736f6c63430005100032" }, "deployedBytecode": { - "object": "0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c806395d89b411161008c578063dd62ed3e11610066578063dd62ed3e146102e2578063e30443bc1461031d578063f2fde38b14610356578063fa9b701814610389576100ea565b806395d89b4114610282578063a0712d681461028a578063a9059cbb146102a9576100ea565b806323b872dd116100c857806323b872dd146101d3578063313ce5671461021657806370a082311461021e5780638da5cb5b14610251576100ea565b806306fdde03146100ef578063095ea7b31461016c57806318160ddd146101b9575b600080fd5b6100f7610391565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610131578181015183820152602001610119565b50505050905090810190601f16801561015e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101a56004803603604081101561018257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561043d565b604080519115158252519081900360200190f35b6101c16104b0565b60408051918252519081900360200190f35b6101a5600480360360608110156101e957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356104b6565b6101c1610772565b6101c16004803603602081101561023457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610778565b6102596107a0565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6100f76107bc565b6102a7600480360360208110156102a057600080fd5b5035610835565b005b6101a5600480360360408110156102bf57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356108bb565b6101c1600480360360408110156102f857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610a4a565b6102a76004803603604081101561033357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610a82565b6102a76004803603602081101561036c57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610b18565b6101c1610b95565b6004805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156104355780601f1061040a57610100808354040283529160200191610435565b820191906000526020600020905b81548152906001019060200180831161041857829003601f168201915b505050505081565b33600081815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b60035490565b73ffffffffffffffffffffffffffffffffffffffff83166000818152600260209081526040808320338452825280832054938352600190915281205490919083111561056357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f45524332305f494e53554646494349454e545f42414c414e4345000000000000604482015290519081900360640190fd5b828110156105d257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f45524332305f494e53554646494349454e545f414c4c4f57414e434500000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020526040902054838101101561066857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f55494e543235365f4f564552464c4f5700000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020526040808220805487019055918716815220805484900390557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156107025773ffffffffffffffffffffffffffffffffffffffff851660009081526002602090815260408083203384529091529020805484900390555b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3506001949350505050565b60065481565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205490565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b6005805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156104355780601f1061040a57610100808354040283529160200191610435565b69021e19e0c9bab24000008111156108ae57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f56414c55455f544f4f5f4c415247450000000000000000000000000000000000604482015290519081900360640190fd5b6108b83382610ba3565b50565b3360009081526001602052604081205482111561093957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f45524332305f494e53554646494349454e545f42414c414e4345000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602052604090205482810110156109cf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f55494e543235365f4f564552464c4f5700000000000000000000000000000000604482015290519081900360640190fd5b3360008181526001602090815260408083208054879003905573ffffffffffffffffffffffffffffffffffffffff871680845292819020805487019055805186815290519293927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020908152604080832093909416825291909152205490565b610a8a610c5c565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205480821015610ad557610acd600354610ac88385610ca5565b610ca5565b600355610aee565b610aea600354610ae58484610ca5565b610cc4565b6003555b5073ffffffffffffffffffffffffffffffffffffffff909116600090815260016020526040902055565b610b20610c5c565b73ffffffffffffffffffffffffffffffffffffffff8116610b5057610b4b610b46610ce7565b610d1e565b6108b8565b6000805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff000000000000000000000000000000000000000090911617905550565b69021e19e0c9bab240000081565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902054610bd4908290610cc4565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040902055600354610c079082610cc4565b60035560408051828152905173ffffffffffffffffffffffffffffffffffffffff8416916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610ca357600054610ca390610b4690339073ffffffffffffffffffffffffffffffffffffffff16610d26565b565b600082821115610cbe57610cbe610b4660028585610db2565b50900390565b600082820183811015610ce057610ce0610b4660008686610db2565b9392505050565b60408051808201909152600481527fe69edc3e00000000000000000000000000000000000000000000000000000000602082015290565b805160208201fd5b6040805173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044808301919091528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1de45ad10000000000000000000000000000000000000000000000000000000017905292915050565b606063e946c1bb60e01b84848460405160240180846003811115610dd257fe5b60ff1681526020018381526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050939250505056fea265627a7a7231582089c03e503c77db7069bea8a94ec1c47ee5201d8bdb53857e70a882a1130e1ac364736f6c634300050c0032" + "object": "0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c806395d89b411161008c578063dd62ed3e11610066578063dd62ed3e146102e2578063e30443bc1461031d578063f2fde38b14610356578063fa9b701814610389576100ea565b806395d89b4114610282578063a0712d681461028a578063a9059cbb146102a9576100ea565b806323b872dd116100c857806323b872dd146101d3578063313ce5671461021657806370a082311461021e5780638da5cb5b14610251576100ea565b806306fdde03146100ef578063095ea7b31461016c57806318160ddd146101b9575b600080fd5b6100f7610391565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610131578181015183820152602001610119565b50505050905090810190601f16801561015e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101a56004803603604081101561018257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561043d565b604080519115158252519081900360200190f35b6101c16104b0565b60408051918252519081900360200190f35b6101a5600480360360608110156101e957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356104b6565b6101c1610772565b6101c16004803603602081101561023457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610778565b6102596107a0565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6100f76107bc565b6102a7600480360360208110156102a057600080fd5b5035610835565b005b6101a5600480360360408110156102bf57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356108bb565b6101c1600480360360408110156102f857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610a4a565b6102a76004803603604081101561033357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610a82565b6102a76004803603602081101561036c57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610b32565b6101c1610bda565b6004805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156104355780601f1061040a57610100808354040283529160200191610435565b820191906000526020600020905b81548152906001019060200180831161041857829003601f168201915b505050505081565b33600081815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b60035490565b73ffffffffffffffffffffffffffffffffffffffff83166000818152600260209081526040808320338452825280832054938352600190915281205490919083111561056357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f45524332305f494e53554646494349454e545f42414c414e4345000000000000604482015290519081900360640190fd5b828110156105d257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f45524332305f494e53554646494349454e545f414c4c4f57414e434500000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020526040902054838101101561066857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f55494e543235365f4f564552464c4f5700000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020526040808220805487019055918716815220805484900390557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156107025773ffffffffffffffffffffffffffffffffffffffff851660009081526002602090815260408083203384529091529020805484900390555b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3506001949350505050565b60065481565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205490565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b6005805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156104355780601f1061040a57610100808354040283529160200191610435565b69021e19e0c9bab24000008111156108ae57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f56414c55455f544f4f5f4c415247450000000000000000000000000000000000604482015290519081900360640190fd5b6108b83382610be8565b50565b3360009081526001602052604081205482111561093957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f45524332305f494e53554646494349454e545f42414c414e4345000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602052604090205482810110156109cf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f55494e543235365f4f564552464c4f5700000000000000000000000000000000604482015290519081900360640190fd5b3360008181526001602090815260408083208054879003905573ffffffffffffffffffffffffffffffffffffffff871680845292819020805487019055805186815290519293927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020908152604080832093909416825291909152205490565b610a8a610cad565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205480821015610ae257610ada610acb828463ffffffff610cf616565b6003549063ffffffff610cf616565b600355610b08565b610b04610af5838363ffffffff610cf616565b6003549063ffffffff610d1516565b6003555b5073ffffffffffffffffffffffffffffffffffffffff909116600090815260016020526040902055565b610b3a610cad565b73ffffffffffffffffffffffffffffffffffffffff8116610b6a57610b65610b60610d38565b610d6f565b6108b8565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b69021e19e0c9bab240000081565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902054610c1f90829063ffffffff610d1516565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040902055600354610c58908263ffffffff610d1516565b60035560408051828152905173ffffffffffffffffffffffffffffffffffffffff8416916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610cf457600054610cf490610b6090339073ffffffffffffffffffffffffffffffffffffffff16610d77565b565b600082821115610d0f57610d0f610b6060028585610e03565b50900390565b600082820183811015610d3157610d31610b6060008686610e03565b9392505050565b60408051808201909152600481527fe69edc3e00000000000000000000000000000000000000000000000000000000602082015290565b805160208201fd5b6040805173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044808301919091528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1de45ad10000000000000000000000000000000000000000000000000000000017905292915050565b606063e946c1bb60e01b84848460405160240180846003811115610e2357fe5b60ff1681526020018381526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050939250505056fea265627a7a7231582068363eaaf6157fb6d8a621bf297ac36a69731cbdca3d7856b87e498da471edf264736f6c63430005100032" } } }, "compiler": { "name": "solc", - "version": "soljson-v0.5.12+commit.7709ece9.js", + "version": "soljson-v0.5.16+commit.9c3226ce.js", "settings": { "optimizer": { "enabled": true, @@ -261,8 +274,8 @@ ] } }, - "evmVersion": "constantinople" + "evmVersion": "istanbul" } }, - "networks": {} + "chains": {} } diff --git a/packages/contract-artifacts/artifacts/DummyERC721Token.json b/packages/contract-artifacts/artifacts/DummyERC721Token.json index 5a8766ff30..3e2014b4a6 100644 --- a/packages/contract-artifacts/artifacts/DummyERC721Token.json +++ b/packages/contract-artifacts/artifacts/DummyERC721Token.json @@ -32,6 +32,15 @@ "name": "ApprovalForAll", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, + { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } + ], + "name": "OwnershipTransferred", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -279,21 +288,25 @@ "_to": "The new owner", "_tokenId": "The NFT to transfer" } + }, + "transferOwnership(address)": { + "details": "Change the owner of this contract.", + "params": { "newOwner": "New owner address." } } } }, "evm": { "bytecode": { - "object": "0x60806040523480156200001157600080fd5b506040516200196938038062001969833981810160405260408110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b9083019060208201858111156200006e57600080fd5b82516401000000008111828201881017156200008957600080fd5b82525081516020918201929091019080838360005b83811015620000b85781810151838201526020016200009e565b50505050905090810190601f168015620000e65780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200010a57600080fd5b9083019060208201858111156200012057600080fd5b82516401000000008111828201881017156200013b57600080fd5b82525081516020918201929091019080838360005b838110156200016a57818101518382015260200162000150565b50505050905090810190601f168015620001985780820380516001836020036101000a031916815260200191505b506040525050600080546001600160a01b03191633179055508151620001c6906005906020850190620001e5565b508051620001dc906006906020840190620001e5565b5050506200028a565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200022857805160ff191683800117855562000258565b8280016001018555821562000258579182015b82811115620002585782518255916020019190600101906200023b565b50620002669291506200026a565b5090565b6200028791905b8082111562000266576000815560010162000271565b90565b6116cf806200029a6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806370a0823111610097578063a22cb46511610066578063a22cb46514610362578063b88d4fde1461039d578063e985e9c51461043a578063f2fde38b14610489576100f5565b806370a08231146102d45780638da5cb5b1461031957806395d89b41146103215780639dc29fac14610329576100f5565b806323b872dd116100d357806323b872dd146101f857806340c10f191461023b57806342842e0e146102745780636352211e146102b7576100f5565b806306fdde03146100fa578063081812fc14610177578063095ea7b3146101bd575b600080fd5b6101026104bc565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561013c578181015183820152602001610124565b50505050905090810190601f1680156101695780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101946004803603602081101561018d57600080fd5b5035610568565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101f6600480360360408110156101d357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610590565b005b6101f66004803603606081101561020e57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356106b2565b6101f66004803603604081101561025157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610a20565b6101f66004803603606081101561028a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610a2e565b610194600480360360208110156102cd57600080fd5b5035610bc8565b610307600480360360208110156102ea57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610c5f565b60408051918252519081900360200190f35b610194610d0c565b610102610d28565b6101f66004803603604081101561033f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610da1565b6101f66004803603604081101561037857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001351515610db3565b6101f6600480360360808110156103b357600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235811692602081013590911691604082013591908101906080810160608201356401000000008111156103fb57600080fd5b82018360208201111561040d57600080fd5b8035906020019184600183028401116401000000008311171561042f57600080fd5b509092509050610e4c565b6104756004803603604081101561045057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516611017565b604080519115158252519081900360200190f35b6101f66004803603602081101561049f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611052565b6005805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156105605780601f1061053557610100808354040283529160200191610560565b820191906000526020600020905b81548152906001019060200180831161054357829003601f168201915b505050505081565b60009081526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b600061059b82610bc8565b90503373ffffffffffffffffffffffffffffffffffffffff821614806105c657506105c68133611017565b61063157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4552433732315f494e56414c49445f53454e4445520000000000000000000000604482015290519081900360640190fd5b60008281526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b73ffffffffffffffffffffffffffffffffffffffff821661073457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4552433732315f5a45524f5f544f5f4144445245535300000000000000000000604482015290519081900360640190fd5b600061073f82610bc8565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146107db57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4552433732315f4f574e45525f4d49534d415443480000000000000000000000604482015290519081900360640190fd5b3360006107e784610568565b90508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148061082857506108288383611017565b8061085e57508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6108c957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4552433732315f494e56414c49445f5350454e44455200000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81161561091a57600084815260026020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555b600084815260016020818152604080842080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8b8116919091179091558a168452600390915290912054610984916110ce565b73ffffffffffffffffffffffffffffffffffffffff80881660009081526003602052604080822093909355908716815220546109c19060016110ed565b73ffffffffffffffffffffffffffffffffffffffff808716600081815260036020526040808220949094559251879391928a16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050505050565b610a2a8282611110565b5050565b610a398383836106b2565b813b8015610bc257604080517f150b7a0200000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff8681166024830152604482018590526080606483015260006084830181905292519086169163150b7a029160c480830192602092919082900301818787803b158015610ace57600080fd5b505af1158015610ae2573d6000803e3d6000fd5b505050506040513d6020811015610af857600080fd5b505160405190915080602f61166c8239602f01905060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610bc057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4552433732315f494e56414c49445f53454c4543544f52000000000000000000604482015290519081900360640190fd5b505b50505050565b60008181526001602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610c5957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4552433732315f5a45524f5f4f574e4552000000000000000000000000000000604482015290519081900360640190fd5b92915050565b600073ffffffffffffffffffffffffffffffffffffffff8216610ce357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4552433732315f5a45524f5f4f574e4552000000000000000000000000000000604482015290519081900360640190fd5b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b6006805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156105605780601f1061053557610100808354040283529160200191610560565b610da96112e3565b610a2a828261132c565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b610e578585856106b2565b833b801561100f576040517f150b7a02000000000000000000000000000000000000000000000000000000008152336004820181815273ffffffffffffffffffffffffffffffffffffffff89811660248501526044840188905260806064850190815260848501879052600094918a169363150b7a029390928c928b928b928b929060a401848480828437600081840152601f19601f8201169050808301925050509650505050505050602060405180830381600087803b158015610f1b57600080fd5b505af1158015610f2f573d6000803e3d6000fd5b505050506040513d6020811015610f4557600080fd5b505160405190915080602f61166c8239602f01905060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461100d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4552433732315f494e56414c49445f53454c4543544f52000000000000000000604482015290519081900360640190fd5b505b505050505050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205460ff1690565b61105a6112e3565b73ffffffffffffffffffffffffffffffffffffffff811661108a57611085611080611501565b611538565b6110cb565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b6000828211156110e7576110e761108060028585611540565b50900390565b6000828201838110156111095761110961108060008686611540565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff821661119257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4552433732315f5a45524f5f544f5f4144445245535300000000000000000000604482015290519081900360640190fd5b60008181526001602052604090205473ffffffffffffffffffffffffffffffffffffffff16801561122457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4552433732315f4f574e45525f414c52454144595f4558495354530000000000604482015290519081900360640190fd5b600082815260016020818152604080842080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8916908117909155845260039091529091205461128a916110ed565b73ffffffffffffffffffffffffffffffffffffffff84166000818152600360205260408082209390935591518492907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461132a5760005461132a9061108090339073ffffffffffffffffffffffffffffffffffffffff166115df565b565b73ffffffffffffffffffffffffffffffffffffffff82166113ae57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4552433732315f5a45524f5f4f574e45525f4144445245535300000000000000604482015290519081900360640190fd5b60008181526001602052604090205473ffffffffffffffffffffffffffffffffffffffff908116908316811461144557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4552433732315f4f574e45525f4d49534d415443480000000000000000000000604482015290519081900360640190fd5b600082815260016020818152604080842080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905573ffffffffffffffffffffffffffffffffffffffff871684526003909152909120546114a7916110ce565b73ffffffffffffffffffffffffffffffffffffffff8416600081815260036020526040808220939093559151849291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a4505050565b60408051808201909152600481527fe69edc3e00000000000000000000000000000000000000000000000000000000602082015290565b805160208201fd5b606063e946c1bb60e01b8484846040516024018084600381111561156057fe5b60ff1681526020018381526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090509392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044808301919091528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1de45ad1000000000000000000000000000000000000000000000000000000001790529291505056fe6f6e455243373231526563656976656428616464726573732c616464726573732c75696e743235362c627974657329a265627a7a723158207bb3c4b1d40aa051fbb8e4f8230bb310013e75ca9fa97c528018b4c4aba3b92564736f6c634300050c0032" + "object": "0x60806040523480156200001157600080fd5b50604051620019a2380380620019a2833981810160405260408110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b9083019060208201858111156200006e57600080fd5b82516401000000008111828201881017156200008957600080fd5b82525081516020918201929091019080838360005b83811015620000b85781810151838201526020016200009e565b50505050905090810190601f168015620000e65780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200010a57600080fd5b9083019060208201858111156200012057600080fd5b82516401000000008111828201881017156200013b57600080fd5b82525081516020918201929091019080838360005b838110156200016a57818101518382015260200162000150565b50505050905090810190601f168015620001985780820380516001836020036101000a031916815260200191505b506040525050600080546001600160a01b03191633179055508151620001c6906005906020850190620001e5565b508051620001dc906006906020840190620001e5565b5050506200028a565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200022857805160ff191683800117855562000258565b8280016001018555821562000258579182015b82811115620002585782518255916020019190600101906200023b565b50620002669291506200026a565b5090565b6200028791905b8082111562000266576000815560010162000271565b90565b611708806200029a6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806370a0823111610097578063a22cb46511610066578063a22cb46514610362578063b88d4fde1461039d578063e985e9c51461043a578063f2fde38b14610489576100f5565b806370a08231146102d45780638da5cb5b1461031957806395d89b41146103215780639dc29fac14610329576100f5565b806323b872dd116100d357806323b872dd146101f857806340c10f191461023b57806342842e0e146102745780636352211e146102b7576100f5565b806306fdde03146100fa578063081812fc14610177578063095ea7b3146101bd575b600080fd5b6101026104bc565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561013c578181015183820152602001610124565b50505050905090810190601f1680156101695780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101946004803603602081101561018d57600080fd5b5035610568565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101f6600480360360408110156101d357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610590565b005b6101f66004803603606081101561020e57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356106b2565b6101f66004803603604081101561025157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610a26565b6101f66004803603606081101561028a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610a34565b610194600480360360208110156102cd57600080fd5b5035610bce565b610307600480360360208110156102ea57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610c65565b60408051918252519081900360200190f35b610194610d12565b610102610d2e565b6101f66004803603604081101561033f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610da7565b6101f66004803603604081101561037857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001351515610db9565b6101f6600480360360808110156103b357600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235811692602081013590911691604082013591908101906080810160608201356401000000008111156103fb57600080fd5b82018360208201111561040d57600080fd5b8035906020019184600183028401116401000000008311171561042f57600080fd5b509092509050610e52565b6104756004803603604081101561045057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602001351661101d565b604080519115158252519081900360200190f35b6101f66004803603602081101561049f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611058565b6005805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156105605780601f1061053557610100808354040283529160200191610560565b820191906000526020600020905b81548152906001019060200180831161054357829003601f168201915b505050505081565b60009081526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b600061059b82610bce565b90503373ffffffffffffffffffffffffffffffffffffffff821614806105c657506105c6813361101d565b61063157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4552433732315f494e56414c49445f53454e4445520000000000000000000000604482015290519081900360640190fd5b60008281526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b73ffffffffffffffffffffffffffffffffffffffff821661073457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4552433732315f5a45524f5f544f5f4144445245535300000000000000000000604482015290519081900360640190fd5b600061073f82610bce565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146107db57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4552433732315f4f574e45525f4d49534d415443480000000000000000000000604482015290519081900360640190fd5b3360006107e784610568565b90508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614806108285750610828838361101d565b8061085e57508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6108c957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4552433732315f494e56414c49445f5350454e44455200000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81161561091a57600084815260026020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555b600084815260016020818152604080842080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8b8116919091179091558a16845260039091529091205461098491611101565b73ffffffffffffffffffffffffffffffffffffffff80881660009081526003602052604080822093909355908716815220546109c790600163ffffffff61112016565b73ffffffffffffffffffffffffffffffffffffffff808716600081815260036020526040808220949094559251879391928a16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050505050565b610a308282611143565b5050565b610a3f8383836106b2565b813b8015610bc857604080517f150b7a0200000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff8681166024830152604482018590526080606483015260006084830181905292519086169163150b7a029160c480830192602092919082900301818787803b158015610ad457600080fd5b505af1158015610ae8573d6000803e3d6000fd5b505050506040513d6020811015610afe57600080fd5b505160405190915080602f6116a58239602f01905060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610bc657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4552433732315f494e56414c49445f53454c4543544f52000000000000000000604482015290519081900360640190fd5b505b50505050565b60008181526001602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610c5f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4552433732315f5a45524f5f4f574e4552000000000000000000000000000000604482015290519081900360640190fd5b92915050565b600073ffffffffffffffffffffffffffffffffffffffff8216610ce957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4552433732315f5a45524f5f4f574e4552000000000000000000000000000000604482015290519081900360640190fd5b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b6006805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156105605780601f1061053557610100808354040283529160200191610560565b610daf611316565b610a30828261135f565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b610e5d8585856106b2565b833b8015611015576040517f150b7a02000000000000000000000000000000000000000000000000000000008152336004820181815273ffffffffffffffffffffffffffffffffffffffff89811660248501526044840188905260806064850190815260848501879052600094918a169363150b7a029390928c928b928b928b929060a401848480828437600081840152601f19601f8201169050808301925050509650505050505050602060405180830381600087803b158015610f2157600080fd5b505af1158015610f35573d6000803e3d6000fd5b505050506040513d6020811015610f4b57600080fd5b505160405190915080602f6116a58239602f01905060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461101357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4552433732315f494e56414c49445f53454c4543544f52000000000000000000604482015290519081900360640190fd5b505b505050505050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205460ff1690565b611060611316565b73ffffffffffffffffffffffffffffffffffffffff81166110905761108b61108661153a565b611571565b6110fe565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35b50565b60008282111561111a5761111a61108660028585611579565b50900390565b60008282018381101561113c5761113c61108660008686611579565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff82166111c557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4552433732315f5a45524f5f544f5f4144445245535300000000000000000000604482015290519081900360640190fd5b60008181526001602052604090205473ffffffffffffffffffffffffffffffffffffffff16801561125757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4552433732315f4f574e45525f414c52454144595f4558495354530000000000604482015290519081900360640190fd5b600082815260016020818152604080842080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff891690811790915584526003909152909120546112bd91611120565b73ffffffffffffffffffffffffffffffffffffffff84166000818152600360205260408082209390935591518492907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461135d5760005461135d9061108690339073ffffffffffffffffffffffffffffffffffffffff16611618565b565b73ffffffffffffffffffffffffffffffffffffffff82166113e157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4552433732315f5a45524f5f4f574e45525f4144445245535300000000000000604482015290519081900360640190fd5b60008181526001602052604090205473ffffffffffffffffffffffffffffffffffffffff908116908316811461147857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4552433732315f4f574e45525f4d49534d415443480000000000000000000000604482015290519081900360640190fd5b600082815260016020818152604080842080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905573ffffffffffffffffffffffffffffffffffffffff871684526003909152909120546114e09163ffffffff61110116565b73ffffffffffffffffffffffffffffffffffffffff8416600081815260036020526040808220939093559151849291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a4505050565b60408051808201909152600481527fe69edc3e00000000000000000000000000000000000000000000000000000000602082015290565b805160208201fd5b606063e946c1bb60e01b8484846040516024018084600381111561159957fe5b60ff1681526020018381526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090509392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044808301919091528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1de45ad1000000000000000000000000000000000000000000000000000000001790529291505056fe6f6e455243373231526563656976656428616464726573732c616464726573732c75696e743235362c627974657329a265627a7a723158200a8e9d99bf20bef83790737ceaf111fb62f69c510b58f13ef3fe65ac7e36f9db64736f6c63430005100032" }, "deployedBytecode": { - "object": "0x608060405234801561001057600080fd5b50600436106100f55760003560e01c806370a0823111610097578063a22cb46511610066578063a22cb46514610362578063b88d4fde1461039d578063e985e9c51461043a578063f2fde38b14610489576100f5565b806370a08231146102d45780638da5cb5b1461031957806395d89b41146103215780639dc29fac14610329576100f5565b806323b872dd116100d357806323b872dd146101f857806340c10f191461023b57806342842e0e146102745780636352211e146102b7576100f5565b806306fdde03146100fa578063081812fc14610177578063095ea7b3146101bd575b600080fd5b6101026104bc565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561013c578181015183820152602001610124565b50505050905090810190601f1680156101695780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101946004803603602081101561018d57600080fd5b5035610568565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101f6600480360360408110156101d357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610590565b005b6101f66004803603606081101561020e57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356106b2565b6101f66004803603604081101561025157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610a20565b6101f66004803603606081101561028a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610a2e565b610194600480360360208110156102cd57600080fd5b5035610bc8565b610307600480360360208110156102ea57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610c5f565b60408051918252519081900360200190f35b610194610d0c565b610102610d28565b6101f66004803603604081101561033f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610da1565b6101f66004803603604081101561037857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001351515610db3565b6101f6600480360360808110156103b357600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235811692602081013590911691604082013591908101906080810160608201356401000000008111156103fb57600080fd5b82018360208201111561040d57600080fd5b8035906020019184600183028401116401000000008311171561042f57600080fd5b509092509050610e4c565b6104756004803603604081101561045057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516611017565b604080519115158252519081900360200190f35b6101f66004803603602081101561049f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611052565b6005805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156105605780601f1061053557610100808354040283529160200191610560565b820191906000526020600020905b81548152906001019060200180831161054357829003601f168201915b505050505081565b60009081526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b600061059b82610bc8565b90503373ffffffffffffffffffffffffffffffffffffffff821614806105c657506105c68133611017565b61063157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4552433732315f494e56414c49445f53454e4445520000000000000000000000604482015290519081900360640190fd5b60008281526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b73ffffffffffffffffffffffffffffffffffffffff821661073457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4552433732315f5a45524f5f544f5f4144445245535300000000000000000000604482015290519081900360640190fd5b600061073f82610bc8565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146107db57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4552433732315f4f574e45525f4d49534d415443480000000000000000000000604482015290519081900360640190fd5b3360006107e784610568565b90508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148061082857506108288383611017565b8061085e57508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6108c957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4552433732315f494e56414c49445f5350454e44455200000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81161561091a57600084815260026020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555b600084815260016020818152604080842080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8b8116919091179091558a168452600390915290912054610984916110ce565b73ffffffffffffffffffffffffffffffffffffffff80881660009081526003602052604080822093909355908716815220546109c19060016110ed565b73ffffffffffffffffffffffffffffffffffffffff808716600081815260036020526040808220949094559251879391928a16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050505050565b610a2a8282611110565b5050565b610a398383836106b2565b813b8015610bc257604080517f150b7a0200000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff8681166024830152604482018590526080606483015260006084830181905292519086169163150b7a029160c480830192602092919082900301818787803b158015610ace57600080fd5b505af1158015610ae2573d6000803e3d6000fd5b505050506040513d6020811015610af857600080fd5b505160405190915080602f61166c8239602f01905060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610bc057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4552433732315f494e56414c49445f53454c4543544f52000000000000000000604482015290519081900360640190fd5b505b50505050565b60008181526001602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610c5957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4552433732315f5a45524f5f4f574e4552000000000000000000000000000000604482015290519081900360640190fd5b92915050565b600073ffffffffffffffffffffffffffffffffffffffff8216610ce357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4552433732315f5a45524f5f4f574e4552000000000000000000000000000000604482015290519081900360640190fd5b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b6006805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156105605780601f1061053557610100808354040283529160200191610560565b610da96112e3565b610a2a828261132c565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b610e578585856106b2565b833b801561100f576040517f150b7a02000000000000000000000000000000000000000000000000000000008152336004820181815273ffffffffffffffffffffffffffffffffffffffff89811660248501526044840188905260806064850190815260848501879052600094918a169363150b7a029390928c928b928b928b929060a401848480828437600081840152601f19601f8201169050808301925050509650505050505050602060405180830381600087803b158015610f1b57600080fd5b505af1158015610f2f573d6000803e3d6000fd5b505050506040513d6020811015610f4557600080fd5b505160405190915080602f61166c8239602f01905060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461100d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4552433732315f494e56414c49445f53454c4543544f52000000000000000000604482015290519081900360640190fd5b505b505050505050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205460ff1690565b61105a6112e3565b73ffffffffffffffffffffffffffffffffffffffff811661108a57611085611080611501565b611538565b6110cb565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b6000828211156110e7576110e761108060028585611540565b50900390565b6000828201838110156111095761110961108060008686611540565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff821661119257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4552433732315f5a45524f5f544f5f4144445245535300000000000000000000604482015290519081900360640190fd5b60008181526001602052604090205473ffffffffffffffffffffffffffffffffffffffff16801561122457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4552433732315f4f574e45525f414c52454144595f4558495354530000000000604482015290519081900360640190fd5b600082815260016020818152604080842080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8916908117909155845260039091529091205461128a916110ed565b73ffffffffffffffffffffffffffffffffffffffff84166000818152600360205260408082209390935591518492907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461132a5760005461132a9061108090339073ffffffffffffffffffffffffffffffffffffffff166115df565b565b73ffffffffffffffffffffffffffffffffffffffff82166113ae57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4552433732315f5a45524f5f4f574e45525f4144445245535300000000000000604482015290519081900360640190fd5b60008181526001602052604090205473ffffffffffffffffffffffffffffffffffffffff908116908316811461144557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4552433732315f4f574e45525f4d49534d415443480000000000000000000000604482015290519081900360640190fd5b600082815260016020818152604080842080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905573ffffffffffffffffffffffffffffffffffffffff871684526003909152909120546114a7916110ce565b73ffffffffffffffffffffffffffffffffffffffff8416600081815260036020526040808220939093559151849291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a4505050565b60408051808201909152600481527fe69edc3e00000000000000000000000000000000000000000000000000000000602082015290565b805160208201fd5b606063e946c1bb60e01b8484846040516024018084600381111561156057fe5b60ff1681526020018381526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090509392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044808301919091528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1de45ad1000000000000000000000000000000000000000000000000000000001790529291505056fe6f6e455243373231526563656976656428616464726573732c616464726573732c75696e743235362c627974657329a265627a7a723158207bb3c4b1d40aa051fbb8e4f8230bb310013e75ca9fa97c528018b4c4aba3b92564736f6c634300050c0032" + "object": "0x608060405234801561001057600080fd5b50600436106100f55760003560e01c806370a0823111610097578063a22cb46511610066578063a22cb46514610362578063b88d4fde1461039d578063e985e9c51461043a578063f2fde38b14610489576100f5565b806370a08231146102d45780638da5cb5b1461031957806395d89b41146103215780639dc29fac14610329576100f5565b806323b872dd116100d357806323b872dd146101f857806340c10f191461023b57806342842e0e146102745780636352211e146102b7576100f5565b806306fdde03146100fa578063081812fc14610177578063095ea7b3146101bd575b600080fd5b6101026104bc565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561013c578181015183820152602001610124565b50505050905090810190601f1680156101695780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101946004803603602081101561018d57600080fd5b5035610568565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101f6600480360360408110156101d357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610590565b005b6101f66004803603606081101561020e57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356106b2565b6101f66004803603604081101561025157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610a26565b6101f66004803603606081101561028a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610a34565b610194600480360360208110156102cd57600080fd5b5035610bce565b610307600480360360208110156102ea57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610c65565b60408051918252519081900360200190f35b610194610d12565b610102610d2e565b6101f66004803603604081101561033f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610da7565b6101f66004803603604081101561037857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001351515610db9565b6101f6600480360360808110156103b357600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235811692602081013590911691604082013591908101906080810160608201356401000000008111156103fb57600080fd5b82018360208201111561040d57600080fd5b8035906020019184600183028401116401000000008311171561042f57600080fd5b509092509050610e52565b6104756004803603604081101561045057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602001351661101d565b604080519115158252519081900360200190f35b6101f66004803603602081101561049f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611058565b6005805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156105605780601f1061053557610100808354040283529160200191610560565b820191906000526020600020905b81548152906001019060200180831161054357829003601f168201915b505050505081565b60009081526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b600061059b82610bce565b90503373ffffffffffffffffffffffffffffffffffffffff821614806105c657506105c6813361101d565b61063157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4552433732315f494e56414c49445f53454e4445520000000000000000000000604482015290519081900360640190fd5b60008281526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b73ffffffffffffffffffffffffffffffffffffffff821661073457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4552433732315f5a45524f5f544f5f4144445245535300000000000000000000604482015290519081900360640190fd5b600061073f82610bce565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146107db57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4552433732315f4f574e45525f4d49534d415443480000000000000000000000604482015290519081900360640190fd5b3360006107e784610568565b90508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614806108285750610828838361101d565b8061085e57508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6108c957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4552433732315f494e56414c49445f5350454e44455200000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81161561091a57600084815260026020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555b600084815260016020818152604080842080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8b8116919091179091558a16845260039091529091205461098491611101565b73ffffffffffffffffffffffffffffffffffffffff80881660009081526003602052604080822093909355908716815220546109c790600163ffffffff61112016565b73ffffffffffffffffffffffffffffffffffffffff808716600081815260036020526040808220949094559251879391928a16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050505050565b610a308282611143565b5050565b610a3f8383836106b2565b813b8015610bc857604080517f150b7a0200000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff8681166024830152604482018590526080606483015260006084830181905292519086169163150b7a029160c480830192602092919082900301818787803b158015610ad457600080fd5b505af1158015610ae8573d6000803e3d6000fd5b505050506040513d6020811015610afe57600080fd5b505160405190915080602f6116a58239602f01905060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610bc657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4552433732315f494e56414c49445f53454c4543544f52000000000000000000604482015290519081900360640190fd5b505b50505050565b60008181526001602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610c5f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4552433732315f5a45524f5f4f574e4552000000000000000000000000000000604482015290519081900360640190fd5b92915050565b600073ffffffffffffffffffffffffffffffffffffffff8216610ce957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4552433732315f5a45524f5f4f574e4552000000000000000000000000000000604482015290519081900360640190fd5b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b6006805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156105605780601f1061053557610100808354040283529160200191610560565b610daf611316565b610a30828261135f565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b610e5d8585856106b2565b833b8015611015576040517f150b7a02000000000000000000000000000000000000000000000000000000008152336004820181815273ffffffffffffffffffffffffffffffffffffffff89811660248501526044840188905260806064850190815260848501879052600094918a169363150b7a029390928c928b928b928b929060a401848480828437600081840152601f19601f8201169050808301925050509650505050505050602060405180830381600087803b158015610f2157600080fd5b505af1158015610f35573d6000803e3d6000fd5b505050506040513d6020811015610f4b57600080fd5b505160405190915080602f6116a58239602f01905060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461101357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4552433732315f494e56414c49445f53454c4543544f52000000000000000000604482015290519081900360640190fd5b505b505050505050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205460ff1690565b611060611316565b73ffffffffffffffffffffffffffffffffffffffff81166110905761108b61108661153a565b611571565b6110fe565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35b50565b60008282111561111a5761111a61108660028585611579565b50900390565b60008282018381101561113c5761113c61108660008686611579565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff82166111c557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4552433732315f5a45524f5f544f5f4144445245535300000000000000000000604482015290519081900360640190fd5b60008181526001602052604090205473ffffffffffffffffffffffffffffffffffffffff16801561125757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4552433732315f4f574e45525f414c52454144595f4558495354530000000000604482015290519081900360640190fd5b600082815260016020818152604080842080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff891690811790915584526003909152909120546112bd91611120565b73ffffffffffffffffffffffffffffffffffffffff84166000818152600360205260408082209390935591518492907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461135d5760005461135d9061108690339073ffffffffffffffffffffffffffffffffffffffff16611618565b565b73ffffffffffffffffffffffffffffffffffffffff82166113e157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4552433732315f5a45524f5f4f574e45525f4144445245535300000000000000604482015290519081900360640190fd5b60008181526001602052604090205473ffffffffffffffffffffffffffffffffffffffff908116908316811461147857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4552433732315f4f574e45525f4d49534d415443480000000000000000000000604482015290519081900360640190fd5b600082815260016020818152604080842080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905573ffffffffffffffffffffffffffffffffffffffff871684526003909152909120546114e09163ffffffff61110116565b73ffffffffffffffffffffffffffffffffffffffff8416600081815260036020526040808220939093559151849291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a4505050565b60408051808201909152600481527fe69edc3e00000000000000000000000000000000000000000000000000000000602082015290565b805160208201fd5b606063e946c1bb60e01b8484846040516024018084600381111561159957fe5b60ff1681526020018381526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090509392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044808301919091528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1de45ad1000000000000000000000000000000000000000000000000000000001790529291505056fe6f6e455243373231526563656976656428616464726573732c616464726573732c75696e743235362c627974657329a265627a7a723158200a8e9d99bf20bef83790737ceaf111fb62f69c510b58f13ef3fe65ac7e36f9db64736f6c63430005100032" } } }, "compiler": { "name": "solc", - "version": "soljson-v0.5.12+commit.7709ece9.js", + "version": "soljson-v0.5.16+commit.9c3226ce.js", "settings": { "optimizer": { "enabled": true, @@ -312,8 +325,8 @@ ] } }, - "evmVersion": "constantinople" + "evmVersion": "istanbul" } }, - "networks": {} + "chains": {} } diff --git a/packages/contract-artifacts/artifacts/ERC1155Mintable.json b/packages/contract-artifacts/artifacts/ERC1155Mintable.json index c406fbe89b..5793337287 100644 --- a/packages/contract-artifacts/artifacts/ERC1155Mintable.json +++ b/packages/contract-artifacts/artifacts/ERC1155Mintable.json @@ -349,16 +349,16 @@ }, "evm": { "bytecode": { - "object": "0x608060405234801561001057600080fd5b506125ef806100206000396000f3fe608060405234801561001057600080fd5b50600436106101765760003560e01c80639f4b286a116100d8578063e0a5c9491161008c578063f242432a11610066578063f242432a146107bb578063f94190881461085d578063fc67bf1c146108d457610176565b8063e0a5c94914610726578063e44591f014610763578063e985e9c51461078057610176565b8063adebf6f2116100bd578063adebf6f21461067a578063cc10e40114610697578063cd53d08e1461070957610176565b80639f4b286a146105c8578063a22cb4651461063f57610176565b80636352211e1161012f5780637269a327116101145780637269a327146104c557806378b27221146104e25780639cca1c64146105ab57610176565b80636352211e146104625780636f969c2d146104a857610176565b80632eb2c2d6116101605780632eb2c2d6146101e35780634e1273f41461031f5780635e81b9581461043157610176565b8062fdd58e1461017b57806308d7d469146101c6575b600080fd5b6101b46004803603604081101561019157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356108dc565b60408051918252519081900360200190f35b6101b4600480360360208110156101dc57600080fd5b5035610966565b61031d600480360360a08110156101f957600080fd5b73ffffffffffffffffffffffffffffffffffffffff823581169260208101359091169181019060608101604082013564010000000081111561023a57600080fd5b82018360208201111561024c57600080fd5b8035906020019184602083028401116401000000008311171561026e57600080fd5b91939092909160208101903564010000000081111561028c57600080fd5b82018360208201111561029e57600080fd5b803590602001918460208302840111640100000000831117156102c057600080fd5b9193909290916020810190356401000000008111156102de57600080fd5b8201836020820111156102f057600080fd5b8035906020019184600183028401116401000000008311171561031257600080fd5b509092509050610978565b005b6103e16004803603604081101561033557600080fd5b81019060208101813564010000000081111561035057600080fd5b82018360208201111561036257600080fd5b8035906020019184602083028401116401000000008311171561038457600080fd5b9193909290916020810190356401000000008111156103a257600080fd5b8201836020820111156103b457600080fd5b803590602001918460208302840111640100000000831117156103d657600080fd5b509092509050611192565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561041d578181015183820152602001610405565b505050509050019250505060405180910390f35b61044e6004803603602081101561044757600080fd5b5035611357565b604080519115158252519081900360200190f35b61047f6004803603602081101561047857600080fd5b503561139d565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101b4600480360360208110156104be57600080fd5b50356113c5565b61044e600480360360208110156104db57600080fd5b50356113ea565b61031d600480360360608110156104f857600080fd5b8135919081019060408101602082013564010000000081111561051a57600080fd5b82018360208201111561052c57600080fd5b8035906020019184602083028401116401000000008311171561054e57600080fd5b91939092909160208101903564010000000081111561056c57600080fd5b82018360208201111561057e57600080fd5b803590602001918460208302840111640100000000831117156105a057600080fd5b50909250905061142f565b6101b4600480360360208110156105c157600080fd5b5035611760565b61031d600480360360408110156105de57600080fd5b8135919081019060408101602082013564010000000081111561060057600080fd5b82018360208201111561061257600080fd5b8035906020019184600183028401116401000000008311171561063457600080fd5b509092509050611775565b61031d6004803603604081101561065557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001351515611875565b61044e6004803603602081101561069057600080fd5b503561190e565b6101b4600480360360408110156106ad57600080fd5b8101906020810181356401000000008111156106c857600080fd5b8201836020820111156106da57600080fd5b803590602001918460018302840111640100000000831117156106fc57600080fd5b9193509150351515611934565b61047f6004803603602081101561071f57600080fd5b5035611a6d565b61072e611a95565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b61044e6004803603602081101561077957600080fd5b5035611ab9565b61044e6004803603604081101561079657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516611ae1565b61031d600480360360a08110156107d157600080fd5b73ffffffffffffffffffffffffffffffffffffffff823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561081e57600080fd5b82018360208201111561083057600080fd5b8035906020019184600183028401116401000000008311171561085257600080fd5b509092509050611b1c565b61031d6004803603604081101561087357600080fd5b8135919081019060408101602082013564010000000081111561089557600080fd5b8201836020820111156108a757600080fd5b803590602001918460208302840111640100000000831117156108c957600080fd5b5090925090506120fb565b61072e61242b565b60006108e782611357565b1561092e5760008281526020819052604090205473ffffffffffffffffffffffffffffffffffffffff848116911614610921576000610924565b60015b60ff169050610960565b50600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091529020545b92915050565b60056020526000908152604090205481565b73ffffffffffffffffffffffffffffffffffffffff87166109fa57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f43414e4e4f545f5452414e534645525f544f5f414444524553535f5a45524f00604482015290519081900360640190fd5b848314610a6857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f544f4b454e5f414e445f56414c5545535f4c454e4754485f4d49534d41544348604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8816331480610ac1575073ffffffffffffffffffffffffffffffffffffffff8816600090815260026020908152604080832033845290915290205460ff1615156001145b610b2c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f494e53554646494349454e545f414c4c4f57414e434500000000000000000000604482015290519081900360640190fd5b60005b85811015610deb576000878783818110610b4557fe5b9050602002013590506000868684818110610b5c57fe5b905060200201359050610b6e82611ab9565b15610cc85780600114610be257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f414d4f554e545f455155414c5f544f5f4f4e455f524551554952454400000000604482015290519081900360640190fd5b60008281526020819052604090205473ffffffffffffffffffffffffffffffffffffffff8c8116911614610c7757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4e46545f4e4f545f4f574e45445f42595f46524f4d5f41444452455353000000604482015290519081900360640190fd5b600082815260208190526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8c16179055610de1565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8f168452909152902054610d02908261244f565b6001600084815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610db06001600084815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482612473565b600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8f1684529091529020555b5050600101610b2f565b508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb898989896040518080602001806020018381038352878782818152602001925060200280828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169091018481038352858152602090810191508690860280828437600083820152604051601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018290039850909650505050505050a4610f1f8773ffffffffffffffffffffffffffffffffffffffff1661248f565b156111885760008773ffffffffffffffffffffffffffffffffffffffff1663bc197c81338b8a8a8a8a8a8a6040518963ffffffff1660e01b8152600401808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001806020018060200184810384528a8a82818152602001925060200280828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169091018581038452888152602090810191508990890280828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910185810383528681526020019050868680828437600081840152601f19601f8201169050808301925050509b505050505050505050505050602060405180830381600087803b1580156110a857600080fd5b505af11580156110bc573d6000803e3d6000fd5b505050506040513d60208110156110d257600080fd5b505190507fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c81000000000000000000000000000000000000000000000000000000001461118657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4241445f52454345495645525f52455455524e5f56414c554500000000000000604482015290519081900360640190fd5b505b5050505050505050565b60608382146111ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061256a6024913960400191505060405180910390fd5b604080518581526020808702820101909152848015611215578160200160208202803883390190505b50905060005b8481101561134e57600084848381811061123157fe5b90506020020135905061124381611357565b156112b95786868381811061125457fe5b600084815260208181526040909120549102929092013573ffffffffffffffffffffffffffffffffffffffff9081169216919091149050611296576000611299565b60015b60ff168383815181106112a857fe5b602002602001018181525050611345565b6000818152600160205260408120908888858181106112d457fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483838151811061133857fe5b6020026020010181815250505b5060010161121b565b50949350505050565b60007f80000000000000000000000000000000000000000000000000000000000000008083161480156109605750506fffffffffffffffffffffffffffffffff16151590565b60009081526020819052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000001690565b60007f80000000000000000000000000000000000000000000000000000000000000008083161480156109605750506fffffffffffffffffffffffffffffffff161590565b600085815260046020526040902054859073ffffffffffffffffffffffffffffffffffffffff16331461146157600080fd5b61146a8661190e565b6114bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d81526020018061258e602d913960400191505060405180910390fd5b60005b848110156117575760008686838181106114d857fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff169050600085858481811061150557fe5b60008c815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8916845282529091205491029290920135925061154a91839150612473565b60008a815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083528184209490945580518d8152918201859052805133927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6292908290030190a46115d68273ffffffffffffffffffffffffffffffffffffffff1661248f565b1561174d57604080517ff23a6e6100000000000000000000000000000000000000000000000000000000815233600482018190526024820152604481018b90526064810183905260a06084820152600060a48201819052915173ffffffffffffffffffffffffffffffffffffffff85169163f23a6e619160e480830192602092919082900301818787803b15801561166d57600080fd5b505af1158015611681573d6000803e3d6000fd5b505050506040513d602081101561169757600080fd5b505190507fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e61000000000000000000000000000000000000000000000000000000001461174b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4241445f52454345495645525f52455455524e5f56414c554500000000000000604482015290519081900360640190fd5b505b50506001016114c2565b50505050505050565b6fffffffffffffffffffffffffffffffff1690565b600083815260046020908152604080832080547fffffffffffffffffffffffff0000000000000000000000000000000000000000163390811790915581518781529283018490528151849391927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62928290030190a4801561187057827f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b838360405180806020018281038252848482818152602001925080828437600083820152604051601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018290039550909350505050a25b505050565b33600081815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b7f8000000000000000000000000000000000000000000000000000000000000000161590565b600380546001019081905560801b811561196b577f8000000000000000000000000000000000000000000000000000000000000000175b600081815260046020908152604080832080547fffffffffffffffffffffffff0000000000000000000000000000000000000000163390811790915581518581529283018490528151849391927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62928290030190a48215611a6657807f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b858560405180806020018281038252848482818152602001925080828437600083820152604051601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018290039550909350505050a25b9392505050565b60046020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b7ff23a6e610000000000000000000000000000000000000000000000000000000081565b7f80000000000000000000000000000000000000000000000000000000000000009081161490565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020908152604080832093909416825291909152205460ff1690565b73ffffffffffffffffffffffffffffffffffffffff8516611b9e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f43414e4e4f545f5452414e534645525f544f5f414444524553535f5a45524f00604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8616331480611bf7575073ffffffffffffffffffffffffffffffffffffffff8616600090815260026020908152604080832033845290915290205460ff1615156001145b611c6257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f494e53554646494349454e545f414c4c4f57414e434500000000000000000000604482015290519081900360640190fd5b611c6b84611ab9565b15611dc55782600114611cdf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f414d4f554e545f455155414c5f544f5f4f4e455f524551554952454400000000604482015290519081900360640190fd5b60008481526020819052604090205473ffffffffffffffffffffffffffffffffffffffff878116911614611d7457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4e46545f4e4f545f4f574e45445f42595f46524f4d5f41444452455353000000604482015290519081900360640190fd5b600084815260208190526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8716179055611e74565b600084815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8a168452909152902054611dff908461244f565b600085815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8b81168552925280832093909355871681522054611e439084612473565b600085815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8a1684529091529020555b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051808381526020018281526020019250505060405180910390a4611f178573ffffffffffffffffffffffffffffffffffffffff1661248f565b156120f35760008573ffffffffffffffffffffffffffffffffffffffff1663f23a6e613389888888886040518763ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050975050505050505050602060405180830381600087803b15801561201557600080fd5b505af1158015612029573d6000803e3d6000fd5b505050506040513d602081101561203f57600080fd5b505190507fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e61000000000000000000000000000000000000000000000000000000001461175757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4241445f52454345495645525f52455455524e5f56414c554500000000000000604482015290519081900360640190fd5b505050505050565b600083815260046020526040902054839073ffffffffffffffffffffffffffffffffffffffff16331461212d57600080fd5b61213684611ab9565b61218b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d81526020018061253d602d913960400191505060405180910390fd5b600084815260056020526040812054600101905b838110156123f75760008585838181106121b557fe5b8486018a176000818152602081815260408083208054958302979097013573ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff00000000000000000000000000000000000000009095168517909655855183815260019181019190915285519396509194869450909233927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6292908290030190a46122768273ffffffffffffffffffffffffffffffffffffffff1661248f565b156123ed57604080517ff23a6e6100000000000000000000000000000000000000000000000000000000815233600482018190526024820152604481018390526001606482015260a06084820152600060a48201819052915173ffffffffffffffffffffffffffffffffffffffff85169163f23a6e619160e480830192602092919082900301818787803b15801561230d57600080fd5b505af1158015612321573d6000803e3d6000fd5b505050506040513d602081101561233757600080fd5b505190507fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e6100000000000000000000000000000000000000000000000000000000146123eb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4241445f52454345495645525f52455455524e5f56414c554500000000000000604482015290519081900360640190fd5b505b505060010161219f565b50600085815260056020526040902054612412908490612473565b6000958652600560205260409095209490945550505050565b7fbc197c810000000000000000000000000000000000000000000000000000000081565b60008282111561246d5761246d61246860028585612495565b612534565b50900390565b600082820183811015611a6657611a6661246860008686612495565b3b151590565b606063e946c1bb60e01b848484604051602401808460038111156124b557fe5b60ff1681526020018381526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090509392505050565b805160208201fdfe54524945445f544f5f4d494e545f4e4f4e5f46554e4749424c455f464f525f46554e4749424c455f544f4b454e4f574e4552535f414e445f4944535f4d5553545f484156455f53414d455f4c454e47544854524945445f544f5f4d494e545f46554e4749424c455f464f525f4e4f4e5f46554e4749424c455f544f4b454ea265627a7a723158205af7d187cbffb255b374d24e5838a04f6b3a3245622025907396b2a61f9d93da64736f6c634300050c0032" + "object": "0x608060405234801561001057600080fd5b50612610806100206000396000f3fe608060405234801561001057600080fd5b50600436106101765760003560e01c80639f4b286a116100d8578063e0a5c9491161008c578063f242432a11610066578063f242432a146107bb578063f94190881461085d578063fc67bf1c146108d457610176565b8063e0a5c94914610726578063e44591f014610763578063e985e9c51461078057610176565b8063adebf6f2116100bd578063adebf6f21461067a578063cc10e40114610697578063cd53d08e1461070957610176565b80639f4b286a146105c8578063a22cb4651461063f57610176565b80636352211e1161012f5780637269a327116101145780637269a327146104c557806378b27221146104e25780639cca1c64146105ab57610176565b80636352211e146104625780636f969c2d146104a857610176565b80632eb2c2d6116101605780632eb2c2d6146101e35780634e1273f41461031f5780635e81b9581461043157610176565b8062fdd58e1461017b57806308d7d469146101c6575b600080fd5b6101b46004803603604081101561019157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356108dc565b60408051918252519081900360200190f35b6101b4600480360360208110156101dc57600080fd5b5035610966565b61031d600480360360a08110156101f957600080fd5b73ffffffffffffffffffffffffffffffffffffffff823581169260208101359091169181019060608101604082013564010000000081111561023a57600080fd5b82018360208201111561024c57600080fd5b8035906020019184602083028401116401000000008311171561026e57600080fd5b91939092909160208101903564010000000081111561028c57600080fd5b82018360208201111561029e57600080fd5b803590602001918460208302840111640100000000831117156102c057600080fd5b9193909290916020810190356401000000008111156102de57600080fd5b8201836020820111156102f057600080fd5b8035906020019184600183028401116401000000008311171561031257600080fd5b509092509050610978565b005b6103e16004803603604081101561033557600080fd5b81019060208101813564010000000081111561035057600080fd5b82018360208201111561036257600080fd5b8035906020019184602083028401116401000000008311171561038457600080fd5b9193909290916020810190356401000000008111156103a257600080fd5b8201836020820111156103b457600080fd5b803590602001918460208302840111640100000000831117156103d657600080fd5b5090925090506111a1565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561041d578181015183820152602001610405565b505050509050019250505060405180910390f35b61044e6004803603602081101561044757600080fd5b5035611366565b604080519115158252519081900360200190f35b61047f6004803603602081101561047857600080fd5b50356113ac565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101b4600480360360208110156104be57600080fd5b50356113d4565b61044e600480360360208110156104db57600080fd5b50356113f9565b61031d600480360360608110156104f857600080fd5b8135919081019060408101602082013564010000000081111561051a57600080fd5b82018360208201111561052c57600080fd5b8035906020019184602083028401116401000000008311171561054e57600080fd5b91939092909160208101903564010000000081111561056c57600080fd5b82018360208201111561057e57600080fd5b803590602001918460208302840111640100000000831117156105a057600080fd5b50909250905061143e565b6101b4600480360360208110156105c157600080fd5b5035611775565b61031d600480360360408110156105de57600080fd5b8135919081019060408101602082013564010000000081111561060057600080fd5b82018360208201111561061257600080fd5b8035906020019184600183028401116401000000008311171561063457600080fd5b50909250905061178a565b61031d6004803603604081101561065557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135151561188a565b61044e6004803603602081101561069057600080fd5b5035611923565b6101b4600480360360408110156106ad57600080fd5b8101906020810181356401000000008111156106c857600080fd5b8201836020820111156106da57600080fd5b803590602001918460018302840111640100000000831117156106fc57600080fd5b9193509150351515611949565b61047f6004803603602081101561071f57600080fd5b5035611a82565b61072e611aaa565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b61044e6004803603602081101561077957600080fd5b5035611ace565b61044e6004803603604081101561079657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516611af6565b61031d600480360360a08110156107d157600080fd5b73ffffffffffffffffffffffffffffffffffffffff823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561081e57600080fd5b82018360208201111561083057600080fd5b8035906020019184600183028401116401000000008311171561085257600080fd5b509092509050611b31565b61031d6004803603604081101561087357600080fd5b8135919081019060408101602082013564010000000081111561089557600080fd5b8201836020820111156108a757600080fd5b803590602001918460208302840111640100000000831117156108c957600080fd5b509092509050612116565b61072e61244c565b60006108e782611366565b1561092e5760008281526020819052604090205473ffffffffffffffffffffffffffffffffffffffff848116911614610921576000610924565b60015b60ff169050610960565b50600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091529020545b92915050565b60056020526000908152604090205481565b73ffffffffffffffffffffffffffffffffffffffff87166109fa57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f43414e4e4f545f5452414e534645525f544f5f414444524553535f5a45524f00604482015290519081900360640190fd5b848314610a6857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f544f4b454e5f414e445f56414c5545535f4c454e4754485f4d49534d41544348604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8816331480610ac1575073ffffffffffffffffffffffffffffffffffffffff8816600090815260026020908152604080832033845290915290205460ff1615156001145b610b2c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f494e53554646494349454e545f414c4c4f57414e434500000000000000000000604482015290519081900360640190fd5b60005b85811015610dfa576000878783818110610b4557fe5b9050602002013590506000868684818110610b5c57fe5b905060200201359050610b6e82611ace565b15610cc85780600114610be257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f414d4f554e545f455155414c5f544f5f4f4e455f524551554952454400000000604482015290519081900360640190fd5b60008281526020819052604090205473ffffffffffffffffffffffffffffffffffffffff8c8116911614610c7757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4e46545f4e4f545f4f574e45445f42595f46524f4d5f41444452455353000000604482015290519081900360640190fd5b600082815260208190526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8c16179055610df0565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8f168452909152902054610d08908263ffffffff61247016565b6001600084815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610dbf816001600085815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461249490919063ffffffff16565b600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8f1684529091529020555b5050600101610b2f565b508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb898989896040518080602001806020018381038352878782818152602001925060200280828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169091018481038352858152602090810191508690860280828437600083820152604051601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018290039850909650505050505050a4610f2e8773ffffffffffffffffffffffffffffffffffffffff166124b0565b156111975760008773ffffffffffffffffffffffffffffffffffffffff1663bc197c81338b8a8a8a8a8a8a6040518963ffffffff1660e01b8152600401808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001806020018060200184810384528a8a82818152602001925060200280828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169091018581038452888152602090810191508990890280828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910185810383528681526020019050868680828437600081840152601f19601f8201169050808301925050509b505050505050505050505050602060405180830381600087803b1580156110b757600080fd5b505af11580156110cb573d6000803e3d6000fd5b505050506040513d60208110156110e157600080fd5b505190507fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c81000000000000000000000000000000000000000000000000000000001461119557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4241445f52454345495645525f52455455524e5f56414c554500000000000000604482015290519081900360640190fd5b505b5050505050505050565b60608382146111fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061258b6024913960400191505060405180910390fd5b604080518581526020808702820101909152848015611224578160200160208202803883390190505b50905060005b8481101561135d57600084848381811061124057fe5b90506020020135905061125281611366565b156112c85786868381811061126357fe5b600084815260208181526040909120549102929092013573ffffffffffffffffffffffffffffffffffffffff90811692169190911490506112a55760006112a8565b60015b60ff168383815181106112b757fe5b602002602001018181525050611354565b6000818152600160205260408120908888858181106112e357fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483838151811061134757fe5b6020026020010181815250505b5060010161122a565b50949350505050565b60007f80000000000000000000000000000000000000000000000000000000000000008083161480156109605750506fffffffffffffffffffffffffffffffff16151590565b60009081526020819052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000001690565b60007f80000000000000000000000000000000000000000000000000000000000000008083161480156109605750506fffffffffffffffffffffffffffffffff161590565b600085815260046020526040902054859073ffffffffffffffffffffffffffffffffffffffff16331461147057600080fd5b61147986611923565b6114ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001806125af602d913960400191505060405180910390fd5b60005b8481101561176c5760008686838181106114e757fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff169050600085858481811061151457fe5b60008c815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8916845282529091205491029290920135925061155f9183915063ffffffff61249416565b60008a815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083528184209490945580518d8152918201859052805133927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6292908290030190a46115eb8273ffffffffffffffffffffffffffffffffffffffff166124b0565b1561176257604080517ff23a6e6100000000000000000000000000000000000000000000000000000000815233600482018190526024820152604481018b90526064810183905260a06084820152600060a48201819052915173ffffffffffffffffffffffffffffffffffffffff85169163f23a6e619160e480830192602092919082900301818787803b15801561168257600080fd5b505af1158015611696573d6000803e3d6000fd5b505050506040513d60208110156116ac57600080fd5b505190507fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e61000000000000000000000000000000000000000000000000000000001461176057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4241445f52454345495645525f52455455524e5f56414c554500000000000000604482015290519081900360640190fd5b505b50506001016114d1565b50505050505050565b6fffffffffffffffffffffffffffffffff1690565b600083815260046020908152604080832080547fffffffffffffffffffffffff0000000000000000000000000000000000000000163390811790915581518781529283018490528151849391927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62928290030190a4801561188557827f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b838360405180806020018281038252848482818152602001925080828437600083820152604051601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018290039550909350505050a25b505050565b33600081815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b7f8000000000000000000000000000000000000000000000000000000000000000161590565b600380546001019081905560801b8115611980577f8000000000000000000000000000000000000000000000000000000000000000175b600081815260046020908152604080832080547fffffffffffffffffffffffff0000000000000000000000000000000000000000163390811790915581518581529283018490528151849391927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62928290030190a48215611a7b57807f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b858560405180806020018281038252848482818152602001925080828437600083820152604051601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018290039550909350505050a25b9392505050565b60046020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b7ff23a6e610000000000000000000000000000000000000000000000000000000081565b7f80000000000000000000000000000000000000000000000000000000000000009081161490565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020908152604080832093909416825291909152205460ff1690565b73ffffffffffffffffffffffffffffffffffffffff8516611bb357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f43414e4e4f545f5452414e534645525f544f5f414444524553535f5a45524f00604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8616331480611c0c575073ffffffffffffffffffffffffffffffffffffffff8616600090815260026020908152604080832033845290915290205460ff1615156001145b611c7757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f494e53554646494349454e545f414c4c4f57414e434500000000000000000000604482015290519081900360640190fd5b611c8084611ace565b15611dda5782600114611cf457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f414d4f554e545f455155414c5f544f5f4f4e455f524551554952454400000000604482015290519081900360640190fd5b60008481526020819052604090205473ffffffffffffffffffffffffffffffffffffffff878116911614611d8957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4e46545f4e4f545f4f574e45445f42595f46524f4d5f41444452455353000000604482015290519081900360640190fd5b600084815260208190526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8716179055611e8f565b600084815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8a168452909152902054611e1a908463ffffffff61247016565b600085815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8b81168552925280832093909355871681522054611e5e9084612494565b600085815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8a1684529091529020555b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051808381526020018281526020019250505060405180910390a4611f328573ffffffffffffffffffffffffffffffffffffffff166124b0565b1561210e5760008573ffffffffffffffffffffffffffffffffffffffff1663f23a6e613389888888886040518763ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050975050505050505050602060405180830381600087803b15801561203057600080fd5b505af1158015612044573d6000803e3d6000fd5b505050506040513d602081101561205a57600080fd5b505190507fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e61000000000000000000000000000000000000000000000000000000001461176c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4241445f52454345495645525f52455455524e5f56414c554500000000000000604482015290519081900360640190fd5b505050505050565b600083815260046020526040902054839073ffffffffffffffffffffffffffffffffffffffff16331461214857600080fd5b61215184611ace565b6121a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d81526020018061255e602d913960400191505060405180910390fd5b600084815260056020526040812054600101905b838110156124125760008585838181106121d057fe5b8486018a176000818152602081815260408083208054958302979097013573ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff00000000000000000000000000000000000000009095168517909655855183815260019181019190915285519396509194869450909233927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6292908290030190a46122918273ffffffffffffffffffffffffffffffffffffffff166124b0565b1561240857604080517ff23a6e6100000000000000000000000000000000000000000000000000000000815233600482018190526024820152604481018390526001606482015260a06084820152600060a48201819052915173ffffffffffffffffffffffffffffffffffffffff85169163f23a6e619160e480830192602092919082900301818787803b15801561232857600080fd5b505af115801561233c573d6000803e3d6000fd5b505050506040513d602081101561235257600080fd5b505190507fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e61000000000000000000000000000000000000000000000000000000001461240657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4241445f52454345495645525f52455455524e5f56414c554500000000000000604482015290519081900360640190fd5b505b50506001016121ba565b5060008581526005602052604090205461243390849063ffffffff61249416565b6000958652600560205260409095209490945550505050565b7fbc197c810000000000000000000000000000000000000000000000000000000081565b60008282111561248e5761248e612489600285856124b6565b612555565b50900390565b600082820183811015611a7b57611a7b612489600086866124b6565b3b151590565b606063e946c1bb60e01b848484604051602401808460038111156124d657fe5b60ff1681526020018381526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090509392505050565b805160208201fdfe54524945445f544f5f4d494e545f4e4f4e5f46554e4749424c455f464f525f46554e4749424c455f544f4b454e4f574e4552535f414e445f4944535f4d5553545f484156455f53414d455f4c454e47544854524945445f544f5f4d494e545f46554e4749424c455f464f525f4e4f4e5f46554e4749424c455f544f4b454ea265627a7a72315820d264d7e8e50717ab727f8f6967d7f8c458d505b1de265584755ff1ebf2464a8264736f6c63430005100032" }, "deployedBytecode": { - "object": "0x608060405234801561001057600080fd5b50600436106101765760003560e01c80639f4b286a116100d8578063e0a5c9491161008c578063f242432a11610066578063f242432a146107bb578063f94190881461085d578063fc67bf1c146108d457610176565b8063e0a5c94914610726578063e44591f014610763578063e985e9c51461078057610176565b8063adebf6f2116100bd578063adebf6f21461067a578063cc10e40114610697578063cd53d08e1461070957610176565b80639f4b286a146105c8578063a22cb4651461063f57610176565b80636352211e1161012f5780637269a327116101145780637269a327146104c557806378b27221146104e25780639cca1c64146105ab57610176565b80636352211e146104625780636f969c2d146104a857610176565b80632eb2c2d6116101605780632eb2c2d6146101e35780634e1273f41461031f5780635e81b9581461043157610176565b8062fdd58e1461017b57806308d7d469146101c6575b600080fd5b6101b46004803603604081101561019157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356108dc565b60408051918252519081900360200190f35b6101b4600480360360208110156101dc57600080fd5b5035610966565b61031d600480360360a08110156101f957600080fd5b73ffffffffffffffffffffffffffffffffffffffff823581169260208101359091169181019060608101604082013564010000000081111561023a57600080fd5b82018360208201111561024c57600080fd5b8035906020019184602083028401116401000000008311171561026e57600080fd5b91939092909160208101903564010000000081111561028c57600080fd5b82018360208201111561029e57600080fd5b803590602001918460208302840111640100000000831117156102c057600080fd5b9193909290916020810190356401000000008111156102de57600080fd5b8201836020820111156102f057600080fd5b8035906020019184600183028401116401000000008311171561031257600080fd5b509092509050610978565b005b6103e16004803603604081101561033557600080fd5b81019060208101813564010000000081111561035057600080fd5b82018360208201111561036257600080fd5b8035906020019184602083028401116401000000008311171561038457600080fd5b9193909290916020810190356401000000008111156103a257600080fd5b8201836020820111156103b457600080fd5b803590602001918460208302840111640100000000831117156103d657600080fd5b509092509050611192565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561041d578181015183820152602001610405565b505050509050019250505060405180910390f35b61044e6004803603602081101561044757600080fd5b5035611357565b604080519115158252519081900360200190f35b61047f6004803603602081101561047857600080fd5b503561139d565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101b4600480360360208110156104be57600080fd5b50356113c5565b61044e600480360360208110156104db57600080fd5b50356113ea565b61031d600480360360608110156104f857600080fd5b8135919081019060408101602082013564010000000081111561051a57600080fd5b82018360208201111561052c57600080fd5b8035906020019184602083028401116401000000008311171561054e57600080fd5b91939092909160208101903564010000000081111561056c57600080fd5b82018360208201111561057e57600080fd5b803590602001918460208302840111640100000000831117156105a057600080fd5b50909250905061142f565b6101b4600480360360208110156105c157600080fd5b5035611760565b61031d600480360360408110156105de57600080fd5b8135919081019060408101602082013564010000000081111561060057600080fd5b82018360208201111561061257600080fd5b8035906020019184600183028401116401000000008311171561063457600080fd5b509092509050611775565b61031d6004803603604081101561065557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001351515611875565b61044e6004803603602081101561069057600080fd5b503561190e565b6101b4600480360360408110156106ad57600080fd5b8101906020810181356401000000008111156106c857600080fd5b8201836020820111156106da57600080fd5b803590602001918460018302840111640100000000831117156106fc57600080fd5b9193509150351515611934565b61047f6004803603602081101561071f57600080fd5b5035611a6d565b61072e611a95565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b61044e6004803603602081101561077957600080fd5b5035611ab9565b61044e6004803603604081101561079657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516611ae1565b61031d600480360360a08110156107d157600080fd5b73ffffffffffffffffffffffffffffffffffffffff823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561081e57600080fd5b82018360208201111561083057600080fd5b8035906020019184600183028401116401000000008311171561085257600080fd5b509092509050611b1c565b61031d6004803603604081101561087357600080fd5b8135919081019060408101602082013564010000000081111561089557600080fd5b8201836020820111156108a757600080fd5b803590602001918460208302840111640100000000831117156108c957600080fd5b5090925090506120fb565b61072e61242b565b60006108e782611357565b1561092e5760008281526020819052604090205473ffffffffffffffffffffffffffffffffffffffff848116911614610921576000610924565b60015b60ff169050610960565b50600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091529020545b92915050565b60056020526000908152604090205481565b73ffffffffffffffffffffffffffffffffffffffff87166109fa57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f43414e4e4f545f5452414e534645525f544f5f414444524553535f5a45524f00604482015290519081900360640190fd5b848314610a6857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f544f4b454e5f414e445f56414c5545535f4c454e4754485f4d49534d41544348604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8816331480610ac1575073ffffffffffffffffffffffffffffffffffffffff8816600090815260026020908152604080832033845290915290205460ff1615156001145b610b2c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f494e53554646494349454e545f414c4c4f57414e434500000000000000000000604482015290519081900360640190fd5b60005b85811015610deb576000878783818110610b4557fe5b9050602002013590506000868684818110610b5c57fe5b905060200201359050610b6e82611ab9565b15610cc85780600114610be257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f414d4f554e545f455155414c5f544f5f4f4e455f524551554952454400000000604482015290519081900360640190fd5b60008281526020819052604090205473ffffffffffffffffffffffffffffffffffffffff8c8116911614610c7757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4e46545f4e4f545f4f574e45445f42595f46524f4d5f41444452455353000000604482015290519081900360640190fd5b600082815260208190526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8c16179055610de1565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8f168452909152902054610d02908261244f565b6001600084815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610db06001600084815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482612473565b600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8f1684529091529020555b5050600101610b2f565b508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb898989896040518080602001806020018381038352878782818152602001925060200280828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169091018481038352858152602090810191508690860280828437600083820152604051601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018290039850909650505050505050a4610f1f8773ffffffffffffffffffffffffffffffffffffffff1661248f565b156111885760008773ffffffffffffffffffffffffffffffffffffffff1663bc197c81338b8a8a8a8a8a8a6040518963ffffffff1660e01b8152600401808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001806020018060200184810384528a8a82818152602001925060200280828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169091018581038452888152602090810191508990890280828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910185810383528681526020019050868680828437600081840152601f19601f8201169050808301925050509b505050505050505050505050602060405180830381600087803b1580156110a857600080fd5b505af11580156110bc573d6000803e3d6000fd5b505050506040513d60208110156110d257600080fd5b505190507fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c81000000000000000000000000000000000000000000000000000000001461118657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4241445f52454345495645525f52455455524e5f56414c554500000000000000604482015290519081900360640190fd5b505b5050505050505050565b60608382146111ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061256a6024913960400191505060405180910390fd5b604080518581526020808702820101909152848015611215578160200160208202803883390190505b50905060005b8481101561134e57600084848381811061123157fe5b90506020020135905061124381611357565b156112b95786868381811061125457fe5b600084815260208181526040909120549102929092013573ffffffffffffffffffffffffffffffffffffffff9081169216919091149050611296576000611299565b60015b60ff168383815181106112a857fe5b602002602001018181525050611345565b6000818152600160205260408120908888858181106112d457fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483838151811061133857fe5b6020026020010181815250505b5060010161121b565b50949350505050565b60007f80000000000000000000000000000000000000000000000000000000000000008083161480156109605750506fffffffffffffffffffffffffffffffff16151590565b60009081526020819052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000001690565b60007f80000000000000000000000000000000000000000000000000000000000000008083161480156109605750506fffffffffffffffffffffffffffffffff161590565b600085815260046020526040902054859073ffffffffffffffffffffffffffffffffffffffff16331461146157600080fd5b61146a8661190e565b6114bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d81526020018061258e602d913960400191505060405180910390fd5b60005b848110156117575760008686838181106114d857fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff169050600085858481811061150557fe5b60008c815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8916845282529091205491029290920135925061154a91839150612473565b60008a815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083528184209490945580518d8152918201859052805133927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6292908290030190a46115d68273ffffffffffffffffffffffffffffffffffffffff1661248f565b1561174d57604080517ff23a6e6100000000000000000000000000000000000000000000000000000000815233600482018190526024820152604481018b90526064810183905260a06084820152600060a48201819052915173ffffffffffffffffffffffffffffffffffffffff85169163f23a6e619160e480830192602092919082900301818787803b15801561166d57600080fd5b505af1158015611681573d6000803e3d6000fd5b505050506040513d602081101561169757600080fd5b505190507fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e61000000000000000000000000000000000000000000000000000000001461174b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4241445f52454345495645525f52455455524e5f56414c554500000000000000604482015290519081900360640190fd5b505b50506001016114c2565b50505050505050565b6fffffffffffffffffffffffffffffffff1690565b600083815260046020908152604080832080547fffffffffffffffffffffffff0000000000000000000000000000000000000000163390811790915581518781529283018490528151849391927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62928290030190a4801561187057827f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b838360405180806020018281038252848482818152602001925080828437600083820152604051601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018290039550909350505050a25b505050565b33600081815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b7f8000000000000000000000000000000000000000000000000000000000000000161590565b600380546001019081905560801b811561196b577f8000000000000000000000000000000000000000000000000000000000000000175b600081815260046020908152604080832080547fffffffffffffffffffffffff0000000000000000000000000000000000000000163390811790915581518581529283018490528151849391927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62928290030190a48215611a6657807f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b858560405180806020018281038252848482818152602001925080828437600083820152604051601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018290039550909350505050a25b9392505050565b60046020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b7ff23a6e610000000000000000000000000000000000000000000000000000000081565b7f80000000000000000000000000000000000000000000000000000000000000009081161490565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020908152604080832093909416825291909152205460ff1690565b73ffffffffffffffffffffffffffffffffffffffff8516611b9e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f43414e4e4f545f5452414e534645525f544f5f414444524553535f5a45524f00604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8616331480611bf7575073ffffffffffffffffffffffffffffffffffffffff8616600090815260026020908152604080832033845290915290205460ff1615156001145b611c6257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f494e53554646494349454e545f414c4c4f57414e434500000000000000000000604482015290519081900360640190fd5b611c6b84611ab9565b15611dc55782600114611cdf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f414d4f554e545f455155414c5f544f5f4f4e455f524551554952454400000000604482015290519081900360640190fd5b60008481526020819052604090205473ffffffffffffffffffffffffffffffffffffffff878116911614611d7457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4e46545f4e4f545f4f574e45445f42595f46524f4d5f41444452455353000000604482015290519081900360640190fd5b600084815260208190526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8716179055611e74565b600084815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8a168452909152902054611dff908461244f565b600085815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8b81168552925280832093909355871681522054611e439084612473565b600085815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8a1684529091529020555b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051808381526020018281526020019250505060405180910390a4611f178573ffffffffffffffffffffffffffffffffffffffff1661248f565b156120f35760008573ffffffffffffffffffffffffffffffffffffffff1663f23a6e613389888888886040518763ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050975050505050505050602060405180830381600087803b15801561201557600080fd5b505af1158015612029573d6000803e3d6000fd5b505050506040513d602081101561203f57600080fd5b505190507fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e61000000000000000000000000000000000000000000000000000000001461175757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4241445f52454345495645525f52455455524e5f56414c554500000000000000604482015290519081900360640190fd5b505050505050565b600083815260046020526040902054839073ffffffffffffffffffffffffffffffffffffffff16331461212d57600080fd5b61213684611ab9565b61218b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d81526020018061253d602d913960400191505060405180910390fd5b600084815260056020526040812054600101905b838110156123f75760008585838181106121b557fe5b8486018a176000818152602081815260408083208054958302979097013573ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff00000000000000000000000000000000000000009095168517909655855183815260019181019190915285519396509194869450909233927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6292908290030190a46122768273ffffffffffffffffffffffffffffffffffffffff1661248f565b156123ed57604080517ff23a6e6100000000000000000000000000000000000000000000000000000000815233600482018190526024820152604481018390526001606482015260a06084820152600060a48201819052915173ffffffffffffffffffffffffffffffffffffffff85169163f23a6e619160e480830192602092919082900301818787803b15801561230d57600080fd5b505af1158015612321573d6000803e3d6000fd5b505050506040513d602081101561233757600080fd5b505190507fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e6100000000000000000000000000000000000000000000000000000000146123eb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4241445f52454345495645525f52455455524e5f56414c554500000000000000604482015290519081900360640190fd5b505b505060010161219f565b50600085815260056020526040902054612412908490612473565b6000958652600560205260409095209490945550505050565b7fbc197c810000000000000000000000000000000000000000000000000000000081565b60008282111561246d5761246d61246860028585612495565b612534565b50900390565b600082820183811015611a6657611a6661246860008686612495565b3b151590565b606063e946c1bb60e01b848484604051602401808460038111156124b557fe5b60ff1681526020018381526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090509392505050565b805160208201fdfe54524945445f544f5f4d494e545f4e4f4e5f46554e4749424c455f464f525f46554e4749424c455f544f4b454e4f574e4552535f414e445f4944535f4d5553545f484156455f53414d455f4c454e47544854524945445f544f5f4d494e545f46554e4749424c455f464f525f4e4f4e5f46554e4749424c455f544f4b454ea265627a7a723158205af7d187cbffb255b374d24e5838a04f6b3a3245622025907396b2a61f9d93da64736f6c634300050c0032" + "object": "0x608060405234801561001057600080fd5b50600436106101765760003560e01c80639f4b286a116100d8578063e0a5c9491161008c578063f242432a11610066578063f242432a146107bb578063f94190881461085d578063fc67bf1c146108d457610176565b8063e0a5c94914610726578063e44591f014610763578063e985e9c51461078057610176565b8063adebf6f2116100bd578063adebf6f21461067a578063cc10e40114610697578063cd53d08e1461070957610176565b80639f4b286a146105c8578063a22cb4651461063f57610176565b80636352211e1161012f5780637269a327116101145780637269a327146104c557806378b27221146104e25780639cca1c64146105ab57610176565b80636352211e146104625780636f969c2d146104a857610176565b80632eb2c2d6116101605780632eb2c2d6146101e35780634e1273f41461031f5780635e81b9581461043157610176565b8062fdd58e1461017b57806308d7d469146101c6575b600080fd5b6101b46004803603604081101561019157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356108dc565b60408051918252519081900360200190f35b6101b4600480360360208110156101dc57600080fd5b5035610966565b61031d600480360360a08110156101f957600080fd5b73ffffffffffffffffffffffffffffffffffffffff823581169260208101359091169181019060608101604082013564010000000081111561023a57600080fd5b82018360208201111561024c57600080fd5b8035906020019184602083028401116401000000008311171561026e57600080fd5b91939092909160208101903564010000000081111561028c57600080fd5b82018360208201111561029e57600080fd5b803590602001918460208302840111640100000000831117156102c057600080fd5b9193909290916020810190356401000000008111156102de57600080fd5b8201836020820111156102f057600080fd5b8035906020019184600183028401116401000000008311171561031257600080fd5b509092509050610978565b005b6103e16004803603604081101561033557600080fd5b81019060208101813564010000000081111561035057600080fd5b82018360208201111561036257600080fd5b8035906020019184602083028401116401000000008311171561038457600080fd5b9193909290916020810190356401000000008111156103a257600080fd5b8201836020820111156103b457600080fd5b803590602001918460208302840111640100000000831117156103d657600080fd5b5090925090506111a1565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561041d578181015183820152602001610405565b505050509050019250505060405180910390f35b61044e6004803603602081101561044757600080fd5b5035611366565b604080519115158252519081900360200190f35b61047f6004803603602081101561047857600080fd5b50356113ac565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101b4600480360360208110156104be57600080fd5b50356113d4565b61044e600480360360208110156104db57600080fd5b50356113f9565b61031d600480360360608110156104f857600080fd5b8135919081019060408101602082013564010000000081111561051a57600080fd5b82018360208201111561052c57600080fd5b8035906020019184602083028401116401000000008311171561054e57600080fd5b91939092909160208101903564010000000081111561056c57600080fd5b82018360208201111561057e57600080fd5b803590602001918460208302840111640100000000831117156105a057600080fd5b50909250905061143e565b6101b4600480360360208110156105c157600080fd5b5035611775565b61031d600480360360408110156105de57600080fd5b8135919081019060408101602082013564010000000081111561060057600080fd5b82018360208201111561061257600080fd5b8035906020019184600183028401116401000000008311171561063457600080fd5b50909250905061178a565b61031d6004803603604081101561065557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135151561188a565b61044e6004803603602081101561069057600080fd5b5035611923565b6101b4600480360360408110156106ad57600080fd5b8101906020810181356401000000008111156106c857600080fd5b8201836020820111156106da57600080fd5b803590602001918460018302840111640100000000831117156106fc57600080fd5b9193509150351515611949565b61047f6004803603602081101561071f57600080fd5b5035611a82565b61072e611aaa565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b61044e6004803603602081101561077957600080fd5b5035611ace565b61044e6004803603604081101561079657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516611af6565b61031d600480360360a08110156107d157600080fd5b73ffffffffffffffffffffffffffffffffffffffff823581169260208101359091169160408201359160608101359181019060a08101608082013564010000000081111561081e57600080fd5b82018360208201111561083057600080fd5b8035906020019184600183028401116401000000008311171561085257600080fd5b509092509050611b31565b61031d6004803603604081101561087357600080fd5b8135919081019060408101602082013564010000000081111561089557600080fd5b8201836020820111156108a757600080fd5b803590602001918460208302840111640100000000831117156108c957600080fd5b509092509050612116565b61072e61244c565b60006108e782611366565b1561092e5760008281526020819052604090205473ffffffffffffffffffffffffffffffffffffffff848116911614610921576000610924565b60015b60ff169050610960565b50600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091529020545b92915050565b60056020526000908152604090205481565b73ffffffffffffffffffffffffffffffffffffffff87166109fa57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f43414e4e4f545f5452414e534645525f544f5f414444524553535f5a45524f00604482015290519081900360640190fd5b848314610a6857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f544f4b454e5f414e445f56414c5545535f4c454e4754485f4d49534d41544348604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8816331480610ac1575073ffffffffffffffffffffffffffffffffffffffff8816600090815260026020908152604080832033845290915290205460ff1615156001145b610b2c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f494e53554646494349454e545f414c4c4f57414e434500000000000000000000604482015290519081900360640190fd5b60005b85811015610dfa576000878783818110610b4557fe5b9050602002013590506000868684818110610b5c57fe5b905060200201359050610b6e82611ace565b15610cc85780600114610be257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f414d4f554e545f455155414c5f544f5f4f4e455f524551554952454400000000604482015290519081900360640190fd5b60008281526020819052604090205473ffffffffffffffffffffffffffffffffffffffff8c8116911614610c7757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4e46545f4e4f545f4f574e45445f42595f46524f4d5f41444452455353000000604482015290519081900360640190fd5b600082815260208190526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8c16179055610df0565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8f168452909152902054610d08908263ffffffff61247016565b6001600084815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610dbf816001600085815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461249490919063ffffffff16565b600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8f1684529091529020555b5050600101610b2f565b508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb898989896040518080602001806020018381038352878782818152602001925060200280828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169091018481038352858152602090810191508690860280828437600083820152604051601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018290039850909650505050505050a4610f2e8773ffffffffffffffffffffffffffffffffffffffff166124b0565b156111975760008773ffffffffffffffffffffffffffffffffffffffff1663bc197c81338b8a8a8a8a8a8a6040518963ffffffff1660e01b8152600401808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001806020018060200184810384528a8a82818152602001925060200280828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169091018581038452888152602090810191508990890280828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910185810383528681526020019050868680828437600081840152601f19601f8201169050808301925050509b505050505050505050505050602060405180830381600087803b1580156110b757600080fd5b505af11580156110cb573d6000803e3d6000fd5b505050506040513d60208110156110e157600080fd5b505190507fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c81000000000000000000000000000000000000000000000000000000001461119557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4241445f52454345495645525f52455455524e5f56414c554500000000000000604482015290519081900360640190fd5b505b5050505050505050565b60608382146111fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061258b6024913960400191505060405180910390fd5b604080518581526020808702820101909152848015611224578160200160208202803883390190505b50905060005b8481101561135d57600084848381811061124057fe5b90506020020135905061125281611366565b156112c85786868381811061126357fe5b600084815260208181526040909120549102929092013573ffffffffffffffffffffffffffffffffffffffff90811692169190911490506112a55760006112a8565b60015b60ff168383815181106112b757fe5b602002602001018181525050611354565b6000818152600160205260408120908888858181106112e357fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483838151811061134757fe5b6020026020010181815250505b5060010161122a565b50949350505050565b60007f80000000000000000000000000000000000000000000000000000000000000008083161480156109605750506fffffffffffffffffffffffffffffffff16151590565b60009081526020819052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000001690565b60007f80000000000000000000000000000000000000000000000000000000000000008083161480156109605750506fffffffffffffffffffffffffffffffff161590565b600085815260046020526040902054859073ffffffffffffffffffffffffffffffffffffffff16331461147057600080fd5b61147986611923565b6114ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001806125af602d913960400191505060405180910390fd5b60005b8481101561176c5760008686838181106114e757fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff169050600085858481811061151457fe5b60008c815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8916845282529091205491029290920135925061155f9183915063ffffffff61249416565b60008a815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083528184209490945580518d8152918201859052805133927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6292908290030190a46115eb8273ffffffffffffffffffffffffffffffffffffffff166124b0565b1561176257604080517ff23a6e6100000000000000000000000000000000000000000000000000000000815233600482018190526024820152604481018b90526064810183905260a06084820152600060a48201819052915173ffffffffffffffffffffffffffffffffffffffff85169163f23a6e619160e480830192602092919082900301818787803b15801561168257600080fd5b505af1158015611696573d6000803e3d6000fd5b505050506040513d60208110156116ac57600080fd5b505190507fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e61000000000000000000000000000000000000000000000000000000001461176057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4241445f52454345495645525f52455455524e5f56414c554500000000000000604482015290519081900360640190fd5b505b50506001016114d1565b50505050505050565b6fffffffffffffffffffffffffffffffff1690565b600083815260046020908152604080832080547fffffffffffffffffffffffff0000000000000000000000000000000000000000163390811790915581518781529283018490528151849391927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62928290030190a4801561188557827f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b838360405180806020018281038252848482818152602001925080828437600083820152604051601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018290039550909350505050a25b505050565b33600081815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b7f8000000000000000000000000000000000000000000000000000000000000000161590565b600380546001019081905560801b8115611980577f8000000000000000000000000000000000000000000000000000000000000000175b600081815260046020908152604080832080547fffffffffffffffffffffffff0000000000000000000000000000000000000000163390811790915581518581529283018490528151849391927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62928290030190a48215611a7b57807f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b858560405180806020018281038252848482818152602001925080828437600083820152604051601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018290039550909350505050a25b9392505050565b60046020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b7ff23a6e610000000000000000000000000000000000000000000000000000000081565b7f80000000000000000000000000000000000000000000000000000000000000009081161490565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020908152604080832093909416825291909152205460ff1690565b73ffffffffffffffffffffffffffffffffffffffff8516611bb357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f43414e4e4f545f5452414e534645525f544f5f414444524553535f5a45524f00604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8616331480611c0c575073ffffffffffffffffffffffffffffffffffffffff8616600090815260026020908152604080832033845290915290205460ff1615156001145b611c7757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f494e53554646494349454e545f414c4c4f57414e434500000000000000000000604482015290519081900360640190fd5b611c8084611ace565b15611dda5782600114611cf457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f414d4f554e545f455155414c5f544f5f4f4e455f524551554952454400000000604482015290519081900360640190fd5b60008481526020819052604090205473ffffffffffffffffffffffffffffffffffffffff878116911614611d8957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4e46545f4e4f545f4f574e45445f42595f46524f4d5f41444452455353000000604482015290519081900360640190fd5b600084815260208190526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8716179055611e8f565b600084815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8a168452909152902054611e1a908463ffffffff61247016565b600085815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8b81168552925280832093909355871681522054611e5e9084612494565b600085815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8a1684529091529020555b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051808381526020018281526020019250505060405180910390a4611f328573ffffffffffffffffffffffffffffffffffffffff166124b0565b1561210e5760008573ffffffffffffffffffffffffffffffffffffffff1663f23a6e613389888888886040518763ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050975050505050505050602060405180830381600087803b15801561203057600080fd5b505af1158015612044573d6000803e3d6000fd5b505050506040513d602081101561205a57600080fd5b505190507fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e61000000000000000000000000000000000000000000000000000000001461176c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4241445f52454345495645525f52455455524e5f56414c554500000000000000604482015290519081900360640190fd5b505050505050565b600083815260046020526040902054839073ffffffffffffffffffffffffffffffffffffffff16331461214857600080fd5b61215184611ace565b6121a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d81526020018061255e602d913960400191505060405180910390fd5b600084815260056020526040812054600101905b838110156124125760008585838181106121d057fe5b8486018a176000818152602081815260408083208054958302979097013573ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff00000000000000000000000000000000000000009095168517909655855183815260019181019190915285519396509194869450909233927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6292908290030190a46122918273ffffffffffffffffffffffffffffffffffffffff166124b0565b1561240857604080517ff23a6e6100000000000000000000000000000000000000000000000000000000815233600482018190526024820152604481018390526001606482015260a06084820152600060a48201819052915173ffffffffffffffffffffffffffffffffffffffff85169163f23a6e619160e480830192602092919082900301818787803b15801561232857600080fd5b505af115801561233c573d6000803e3d6000fd5b505050506040513d602081101561235257600080fd5b505190507fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e61000000000000000000000000000000000000000000000000000000001461240657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4241445f52454345495645525f52455455524e5f56414c554500000000000000604482015290519081900360640190fd5b505b50506001016121ba565b5060008581526005602052604090205461243390849063ffffffff61249416565b6000958652600560205260409095209490945550505050565b7fbc197c810000000000000000000000000000000000000000000000000000000081565b60008282111561248e5761248e612489600285856124b6565b612555565b50900390565b600082820183811015611a7b57611a7b612489600086866124b6565b3b151590565b606063e946c1bb60e01b848484604051602401808460038111156124d657fe5b60ff1681526020018381526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090509392505050565b805160208201fdfe54524945445f544f5f4d494e545f4e4f4e5f46554e4749424c455f464f525f46554e4749424c455f544f4b454e4f574e4552535f414e445f4944535f4d5553545f484156455f53414d455f4c454e47544854524945445f544f5f4d494e545f46554e4749424c455f464f525f4e4f4e5f46554e4749424c455f544f4b454ea265627a7a72315820d264d7e8e50717ab727f8f6967d7f8c458d505b1de265584755ff1ebf2464a8264736f6c63430005100032" } } }, "compiler": { "name": "solc", - "version": "soljson-v0.5.12+commit.7709ece9.js", + "version": "soljson-v0.5.16+commit.9c3226ce.js", "settings": { "optimizer": { "enabled": true, @@ -377,8 +377,8 @@ ] } }, - "evmVersion": "constantinople" + "evmVersion": "istanbul" } }, - "networks": {} + "chains": {} } diff --git a/packages/contract-artifacts/artifacts/ERC1155Proxy.json b/packages/contract-artifacts/artifacts/ERC1155Proxy.json index 547aa6e086..a7f1ee7043 100644 --- a/packages/contract-artifacts/artifacts/ERC1155Proxy.json +++ b/packages/contract-artifacts/artifacts/ERC1155Proxy.json @@ -21,6 +21,15 @@ "name": "AuthorizedAddressRemoved", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, + { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } + ], + "name": "OwnershipTransferred", + "type": "event" + }, { "constant": false, "inputs": [{ "internalType": "address", "name": "target", "type": "address" }], @@ -158,16 +167,16 @@ }, "evm": { "bytecode": { - "object": "0x6080604052600080546001600160a01b031916331790556114b3806100256000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c8063a85e59e411610076578063b91816111161005b578063b918161114610285578063d39de6e9146102cc578063f2fde38b14610324576100be565b8063a85e59e4146101b2578063ae25532e14610248576100be565b806370712939116100a7578063707129391461013e5780638da5cb5b146101715780639ad2674414610179576100be565b806342f1181e146100c3578063494503d4146100f8575b600080fd5b6100f6600480360360208110156100d957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610357565b005b6101156004803603602081101561010e57600080fd5b5035610543565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6100f66004803603602081101561015457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610577565b61011561086a565b6100f66004803603604081101561018f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610886565b6100f6600480360360808110156101c857600080fd5b8101906020810181356401000000008111156101e357600080fd5b8201836020820111156101f557600080fd5b8035906020019184600183028401116401000000008311171561021757600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610c37565b610250611138565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b6102b86004803603602081101561029b57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611159565b604080519115158252519081900360200190f35b6102d461116e565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103105781810151838201526020016102f8565b505050509050019250505060405180910390f35b6100f66004803603602081101561033a57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166111dd565b60005473ffffffffffffffffffffffffffffffffffffffff1633146103dd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff161561047257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5441524745545f414c52454144595f415554484f52495a454400000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b6002818154811061055057fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105fd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff1661069157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116600090815260016020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b600254811015610823578173ffffffffffffffffffffffffffffffffffffffff166002828154811061070b57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561081b57600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061076357fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff909216918390811061079657fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01906108159082611407565b50610823565b6001016106dd565b50604051339073ffffffffffffffffffffffffffffffffffffffff8316907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a350565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff16331461090c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff166109a057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b6002548110610a1057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f494e4445585f4f55545f4f465f424f554e445300000000000000000000000000604482015290519081900360640190fd5b8173ffffffffffffffffffffffffffffffffffffffff1660028281548110610a3457fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614610ac257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f415554484f52495a45445f414444524553535f4d49534d415443480000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110610b3d57fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff9092169183908110610b7057fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190610bef9082611407565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b3360009081526001602052604090205460ff16610cb557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f53454e4445525f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b60006060806060610d0b60048a8a90508b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092949392505063ffffffff6112c3169050565b8060200190516080811015610d1f57600080fd5b815160208301805160405192949293830192919084640100000000821115610d4657600080fd5b908301906020820185811115610d5b57600080fd5b8251866020820283011164010000000082111715610d7857600080fd5b82525081516020918201928201910280838360005b83811015610da5578181015183820152602001610d8d565b5050505090500160405260200180516040519392919084640100000000821115610dce57600080fd5b908301906020820185811115610de357600080fd5b8251866020820283011164010000000082111715610e0057600080fd5b82525081516020918201928201910280838360005b83811015610e2d578181015183820152602001610e15565b5050505090500160405260200180516040519392919084640100000000821115610e5657600080fd5b908301906020820185811115610e6b57600080fd5b8251640100000000811182820188101715610e8557600080fd5b82525081516020918201929091019080838360005b83811015610eb2578181015183820152602001610e9a565b50505050905090810190601f168015610edf5780820380516001836020036101000a031916815260200191505b506040525050509350935093509350600082519050606081604051908082528060200260200182016040528015610f20578160200160208202803883390190505b50905060005b828114610f6957610f4a858281518110610f3c57fe5b602002602001015189611306565b828281518110610f5657fe5b6020908102919091010152600101610f26565b508573ffffffffffffffffffffffffffffffffffffffff16632eb2c2d68a8a8885886040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b8381101561104657818101518382015260200161102e565b50505050905001848103835286818151815260200191508051906020019060200280838360005b8381101561108557818101518382015260200161106d565b50505050905001848103825285818151815260200191508051906020019080838360005b838110156110c15781810151838201526020016110a9565b50505050905090810190601f1680156110ee5780820380516001836020036101000a031916815260200191505b5098505050505050505050600060405180830381600087803b15801561111357600080fd5b505af1158015611127573d6000803e3d6000fd5b505050505050505050505050505050565b6000604051808061144f603091396030019050604051809103902090505b90565b60016020526000908152604090205460ff1681565b606060028054806020026020016040519081016040528092919081815260200182805480156111d357602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116111a8575b5050505050905090565b60005473ffffffffffffffffffffffffffffffffffffffff16331461126357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116156112c057600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b6060818311156112e1576112e16112dc60008585611340565b6113df565b83518211156112fa576112fa6112dc6001848751611340565b50819003910190815290565b6000826113155750600061133a565b8282028284828161132257fe5b0414611337576113376112dc600186866113e7565b90505b92915050565b6060632800659560e01b8484846040516024018084600781111561136057fe5b60ff1681526020018381526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090509392505050565b805160208201fd5b606063e946c1bb60e01b8484846040516024018084600381111561136057fe5b81548183558181111561142b5760008381526020902061142b918101908301611430565b505050565b61115691905b8082111561144a5760008155600101611436565b509056fe4552433131353541737365747328616464726573732c75696e743235365b5d2c75696e743235365b5d2c627974657329a265627a7a72315820be5e6597d38133fd52aac17250498790f106d5d4d0e4ab30d0e854a2db1e2ffe64736f6c634300050c0032" + "object": "0x6080604052600080546001600160a01b031916331790556114bc806100256000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c8063a85e59e411610076578063b91816111161005b578063b918161114610285578063d39de6e9146102cc578063f2fde38b14610324576100be565b8063a85e59e4146101b2578063ae25532e14610248576100be565b806370712939116100a7578063707129391461013e5780638da5cb5b146101715780639ad2674414610179576100be565b806342f1181e146100c3578063494503d4146100f8575b600080fd5b6100f6600480360360208110156100d957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610357565b005b6101156004803603602081101561010e57600080fd5b5035610543565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6100f66004803603602081101561015457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610577565b61011561086a565b6100f66004803603604081101561018f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610886565b6100f6600480360360808110156101c857600080fd5b8101906020810181356401000000008111156101e357600080fd5b8201836020820111156101f557600080fd5b8035906020019184600183028401116401000000008311171561021757600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610c37565b610250611141565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b6102b86004803603602081101561029b57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611162565b604080519115158252519081900360200190f35b6102d4611177565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103105781810151838201526020016102f8565b505050509050019250505060405180910390f35b6100f66004803603602081101561033a57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166111e6565b60005473ffffffffffffffffffffffffffffffffffffffff1633146103dd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff161561047257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5441524745545f414c52454144595f415554484f52495a454400000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b6002818154811061055057fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105fd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff1661069157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116600090815260016020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b600254811015610823578173ffffffffffffffffffffffffffffffffffffffff166002828154811061070b57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561081b57600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061076357fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff909216918390811061079657fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01906108159082611410565b50610823565b6001016106dd565b50604051339073ffffffffffffffffffffffffffffffffffffffff8316907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a350565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff16331461090c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff166109a057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b6002548110610a1057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f494e4445585f4f55545f4f465f424f554e445300000000000000000000000000604482015290519081900360640190fd5b8173ffffffffffffffffffffffffffffffffffffffff1660028281548110610a3457fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614610ac257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f415554484f52495a45445f414444524553535f4d49534d415443480000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110610b3d57fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff9092169183908110610b7057fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190610bef9082611410565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b3360009081526001602052604090205460ff16610cb557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f53454e4445525f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b60006060806060610d0b60048a8a90508b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092949392505063ffffffff6112cc169050565b8060200190516080811015610d1f57600080fd5b815160208301805160405192949293830192919084640100000000821115610d4657600080fd5b908301906020820185811115610d5b57600080fd5b8251866020820283011164010000000082111715610d7857600080fd5b82525081516020918201928201910280838360005b83811015610da5578181015183820152602001610d8d565b5050505090500160405260200180516040519392919084640100000000821115610dce57600080fd5b908301906020820185811115610de357600080fd5b8251866020820283011164010000000082111715610e0057600080fd5b82525081516020918201928201910280838360005b83811015610e2d578181015183820152602001610e15565b5050505090500160405260200180516040519392919084640100000000821115610e5657600080fd5b908301906020820185811115610e6b57600080fd5b8251640100000000811182820188101715610e8557600080fd5b82525081516020918201929091019080838360005b83811015610eb2578181015183820152602001610e9a565b50505050905090810190601f168015610edf5780820380516001836020036101000a031916815260200191505b506040525050509350935093509350600082519050606081604051908082528060200260200182016040528015610f20578160200160208202803883390190505b50905060005b828114610f7257610f5388868381518110610f3d57fe5b602002602001015161130f90919063ffffffff16565b828281518110610f5f57fe5b6020908102919091010152600101610f26565b508573ffffffffffffffffffffffffffffffffffffffff16632eb2c2d68a8a8885886040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b8381101561104f578181015183820152602001611037565b50505050905001848103835286818151815260200191508051906020019060200280838360005b8381101561108e578181015183820152602001611076565b50505050905001848103825285818151815260200191508051906020019080838360005b838110156110ca5781810151838201526020016110b2565b50505050905090810190601f1680156110f75780820380516001836020036101000a031916815260200191505b5098505050505050505050600060405180830381600087803b15801561111c57600080fd5b505af1158015611130573d6000803e3d6000fd5b505050505050505050505050505050565b60006040518080611458603091396030019050604051809103902090505b90565b60016020526000908152604090205460ff1681565b606060028054806020026020016040519081016040528092919081815260200182805480156111dc57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116111b1575b5050505050905090565b60005473ffffffffffffffffffffffffffffffffffffffff16331461126c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116156112c957600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b6060818311156112ea576112ea6112e560008585611349565b6113e8565b8351821115611303576113036112e56001848751611349565b50819003910190815290565b60008261131e57506000611343565b8282028284828161132b57fe5b0414611340576113406112e5600186866113f0565b90505b92915050565b6060632800659560e01b8484846040516024018084600781111561136957fe5b60ff1681526020018381526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090509392505050565b805160208201fd5b606063e946c1bb60e01b8484846040516024018084600381111561136957fe5b81548183558181111561143457600083815260209020611434918101908301611439565b505050565b61115f91905b80821115611453576000815560010161143f565b509056fe4552433131353541737365747328616464726573732c75696e743235365b5d2c75696e743235365b5d2c627974657329a265627a7a72315820c21966e12d2a564c986f80e108732503ca0ac4445e1ee20b7fcc8f79968ac47d64736f6c63430005100032" }, "deployedBytecode": { - "object": "0x608060405234801561001057600080fd5b50600436106100be5760003560e01c8063a85e59e411610076578063b91816111161005b578063b918161114610285578063d39de6e9146102cc578063f2fde38b14610324576100be565b8063a85e59e4146101b2578063ae25532e14610248576100be565b806370712939116100a7578063707129391461013e5780638da5cb5b146101715780639ad2674414610179576100be565b806342f1181e146100c3578063494503d4146100f8575b600080fd5b6100f6600480360360208110156100d957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610357565b005b6101156004803603602081101561010e57600080fd5b5035610543565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6100f66004803603602081101561015457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610577565b61011561086a565b6100f66004803603604081101561018f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610886565b6100f6600480360360808110156101c857600080fd5b8101906020810181356401000000008111156101e357600080fd5b8201836020820111156101f557600080fd5b8035906020019184600183028401116401000000008311171561021757600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610c37565b610250611138565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b6102b86004803603602081101561029b57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611159565b604080519115158252519081900360200190f35b6102d461116e565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103105781810151838201526020016102f8565b505050509050019250505060405180910390f35b6100f66004803603602081101561033a57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166111dd565b60005473ffffffffffffffffffffffffffffffffffffffff1633146103dd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff161561047257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5441524745545f414c52454144595f415554484f52495a454400000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b6002818154811061055057fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105fd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff1661069157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116600090815260016020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b600254811015610823578173ffffffffffffffffffffffffffffffffffffffff166002828154811061070b57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561081b57600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061076357fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff909216918390811061079657fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01906108159082611407565b50610823565b6001016106dd565b50604051339073ffffffffffffffffffffffffffffffffffffffff8316907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a350565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff16331461090c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff166109a057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b6002548110610a1057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f494e4445585f4f55545f4f465f424f554e445300000000000000000000000000604482015290519081900360640190fd5b8173ffffffffffffffffffffffffffffffffffffffff1660028281548110610a3457fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614610ac257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f415554484f52495a45445f414444524553535f4d49534d415443480000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110610b3d57fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff9092169183908110610b7057fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190610bef9082611407565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b3360009081526001602052604090205460ff16610cb557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f53454e4445525f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b60006060806060610d0b60048a8a90508b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092949392505063ffffffff6112c3169050565b8060200190516080811015610d1f57600080fd5b815160208301805160405192949293830192919084640100000000821115610d4657600080fd5b908301906020820185811115610d5b57600080fd5b8251866020820283011164010000000082111715610d7857600080fd5b82525081516020918201928201910280838360005b83811015610da5578181015183820152602001610d8d565b5050505090500160405260200180516040519392919084640100000000821115610dce57600080fd5b908301906020820185811115610de357600080fd5b8251866020820283011164010000000082111715610e0057600080fd5b82525081516020918201928201910280838360005b83811015610e2d578181015183820152602001610e15565b5050505090500160405260200180516040519392919084640100000000821115610e5657600080fd5b908301906020820185811115610e6b57600080fd5b8251640100000000811182820188101715610e8557600080fd5b82525081516020918201929091019080838360005b83811015610eb2578181015183820152602001610e9a565b50505050905090810190601f168015610edf5780820380516001836020036101000a031916815260200191505b506040525050509350935093509350600082519050606081604051908082528060200260200182016040528015610f20578160200160208202803883390190505b50905060005b828114610f6957610f4a858281518110610f3c57fe5b602002602001015189611306565b828281518110610f5657fe5b6020908102919091010152600101610f26565b508573ffffffffffffffffffffffffffffffffffffffff16632eb2c2d68a8a8885886040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b8381101561104657818101518382015260200161102e565b50505050905001848103835286818151815260200191508051906020019060200280838360005b8381101561108557818101518382015260200161106d565b50505050905001848103825285818151815260200191508051906020019080838360005b838110156110c15781810151838201526020016110a9565b50505050905090810190601f1680156110ee5780820380516001836020036101000a031916815260200191505b5098505050505050505050600060405180830381600087803b15801561111357600080fd5b505af1158015611127573d6000803e3d6000fd5b505050505050505050505050505050565b6000604051808061144f603091396030019050604051809103902090505b90565b60016020526000908152604090205460ff1681565b606060028054806020026020016040519081016040528092919081815260200182805480156111d357602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116111a8575b5050505050905090565b60005473ffffffffffffffffffffffffffffffffffffffff16331461126357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116156112c057600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b6060818311156112e1576112e16112dc60008585611340565b6113df565b83518211156112fa576112fa6112dc6001848751611340565b50819003910190815290565b6000826113155750600061133a565b8282028284828161132257fe5b0414611337576113376112dc600186866113e7565b90505b92915050565b6060632800659560e01b8484846040516024018084600781111561136057fe5b60ff1681526020018381526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090509392505050565b805160208201fd5b606063e946c1bb60e01b8484846040516024018084600381111561136057fe5b81548183558181111561142b5760008381526020902061142b918101908301611430565b505050565b61115691905b8082111561144a5760008155600101611436565b509056fe4552433131353541737365747328616464726573732c75696e743235365b5d2c75696e743235365b5d2c627974657329a265627a7a72315820be5e6597d38133fd52aac17250498790f106d5d4d0e4ab30d0e854a2db1e2ffe64736f6c634300050c0032" + "object": "0x608060405234801561001057600080fd5b50600436106100be5760003560e01c8063a85e59e411610076578063b91816111161005b578063b918161114610285578063d39de6e9146102cc578063f2fde38b14610324576100be565b8063a85e59e4146101b2578063ae25532e14610248576100be565b806370712939116100a7578063707129391461013e5780638da5cb5b146101715780639ad2674414610179576100be565b806342f1181e146100c3578063494503d4146100f8575b600080fd5b6100f6600480360360208110156100d957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610357565b005b6101156004803603602081101561010e57600080fd5b5035610543565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6100f66004803603602081101561015457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610577565b61011561086a565b6100f66004803603604081101561018f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610886565b6100f6600480360360808110156101c857600080fd5b8101906020810181356401000000008111156101e357600080fd5b8201836020820111156101f557600080fd5b8035906020019184600183028401116401000000008311171561021757600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610c37565b610250611141565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b6102b86004803603602081101561029b57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611162565b604080519115158252519081900360200190f35b6102d4611177565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103105781810151838201526020016102f8565b505050509050019250505060405180910390f35b6100f66004803603602081101561033a57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166111e6565b60005473ffffffffffffffffffffffffffffffffffffffff1633146103dd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff161561047257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5441524745545f414c52454144595f415554484f52495a454400000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b6002818154811061055057fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105fd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff1661069157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116600090815260016020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b600254811015610823578173ffffffffffffffffffffffffffffffffffffffff166002828154811061070b57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561081b57600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061076357fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff909216918390811061079657fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01906108159082611410565b50610823565b6001016106dd565b50604051339073ffffffffffffffffffffffffffffffffffffffff8316907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a350565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff16331461090c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff166109a057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b6002548110610a1057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f494e4445585f4f55545f4f465f424f554e445300000000000000000000000000604482015290519081900360640190fd5b8173ffffffffffffffffffffffffffffffffffffffff1660028281548110610a3457fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614610ac257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f415554484f52495a45445f414444524553535f4d49534d415443480000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110610b3d57fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff9092169183908110610b7057fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190610bef9082611410565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b3360009081526001602052604090205460ff16610cb557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f53454e4445525f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b60006060806060610d0b60048a8a90508b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092949392505063ffffffff6112cc169050565b8060200190516080811015610d1f57600080fd5b815160208301805160405192949293830192919084640100000000821115610d4657600080fd5b908301906020820185811115610d5b57600080fd5b8251866020820283011164010000000082111715610d7857600080fd5b82525081516020918201928201910280838360005b83811015610da5578181015183820152602001610d8d565b5050505090500160405260200180516040519392919084640100000000821115610dce57600080fd5b908301906020820185811115610de357600080fd5b8251866020820283011164010000000082111715610e0057600080fd5b82525081516020918201928201910280838360005b83811015610e2d578181015183820152602001610e15565b5050505090500160405260200180516040519392919084640100000000821115610e5657600080fd5b908301906020820185811115610e6b57600080fd5b8251640100000000811182820188101715610e8557600080fd5b82525081516020918201929091019080838360005b83811015610eb2578181015183820152602001610e9a565b50505050905090810190601f168015610edf5780820380516001836020036101000a031916815260200191505b506040525050509350935093509350600082519050606081604051908082528060200260200182016040528015610f20578160200160208202803883390190505b50905060005b828114610f7257610f5388868381518110610f3d57fe5b602002602001015161130f90919063ffffffff16565b828281518110610f5f57fe5b6020908102919091010152600101610f26565b508573ffffffffffffffffffffffffffffffffffffffff16632eb2c2d68a8a8885886040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b8381101561104f578181015183820152602001611037565b50505050905001848103835286818151815260200191508051906020019060200280838360005b8381101561108e578181015183820152602001611076565b50505050905001848103825285818151815260200191508051906020019080838360005b838110156110ca5781810151838201526020016110b2565b50505050905090810190601f1680156110f75780820380516001836020036101000a031916815260200191505b5098505050505050505050600060405180830381600087803b15801561111c57600080fd5b505af1158015611130573d6000803e3d6000fd5b505050505050505050505050505050565b60006040518080611458603091396030019050604051809103902090505b90565b60016020526000908152604090205460ff1681565b606060028054806020026020016040519081016040528092919081815260200182805480156111dc57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116111b1575b5050505050905090565b60005473ffffffffffffffffffffffffffffffffffffffff16331461126c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116156112c957600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b6060818311156112ea576112ea6112e560008585611349565b6113e8565b8351821115611303576113036112e56001848751611349565b50819003910190815290565b60008261131e57506000611343565b8282028284828161132b57fe5b0414611340576113406112e5600186866113f0565b90505b92915050565b6060632800659560e01b8484846040516024018084600781111561136957fe5b60ff1681526020018381526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090509392505050565b805160208201fd5b606063e946c1bb60e01b8484846040516024018084600381111561136957fe5b81548183558181111561143457600083815260209020611434918101908301611439565b505050565b61115f91905b80821115611453576000815560010161143f565b509056fe4552433131353541737365747328616464726573732c75696e743235365b5d2c75696e743235365b5d2c627974657329a265627a7a72315820c21966e12d2a564c986f80e108732503ca0ac4445e1ee20b7fcc8f79968ac47d64736f6c63430005100032" } } }, "compiler": { "name": "solc", - "version": "soljson-v0.5.12+commit.7709ece9.js", + "version": "soljson-v0.5.16+commit.9c3226ce.js", "settings": { "optimizer": { "enabled": true, @@ -186,8 +195,8 @@ ] } }, - "evmVersion": "constantinople" + "evmVersion": "istanbul" } }, - "networks": {} + "chains": {} } diff --git a/packages/contract-artifacts/artifacts/ERC20BridgeProxy.json b/packages/contract-artifacts/artifacts/ERC20BridgeProxy.json index 41543a9a59..e5668365f0 100644 --- a/packages/contract-artifacts/artifacts/ERC20BridgeProxy.json +++ b/packages/contract-artifacts/artifacts/ERC20BridgeProxy.json @@ -178,21 +178,25 @@ "from": "Address to transfer asset from.", "to": "Address to transfer asset to." } + }, + "transferOwnership(address)": { + "details": "Change the owner of this contract.", + "params": { "newOwner": "New owner address." } } } }, "evm": { "bytecode": { - "object": "0x6080604052600080546001600160a01b03191633179055611463806100256000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c8063a85e59e411610081578063d39de6e91161005b578063d39de6e914610182578063f2fde38b14610197578063fc124ebd146101aa576100c9565b8063a85e59e41461013a578063ae25532e1461014d578063b918161114610162576100c9565b806370712939116100b2578063707129391461010c5780638da5cb5b1461011f5780639ad2674414610127576100c9565b806342f1181e146100ce578063494503d4146100e3575b600080fd5b6100e16100dc366004610f27565b6101ca565b005b6100f66100f1366004611160565b6101de565b6040516101039190611190565b60405180910390f35b6100e161011a366004610f27565b610212565b6100f66102cc565b6100e1610135366004611032565b6102e8565b6100e16101483660046110f2565b6102fa565b6101556104f6565b60405161010391906112c5565b610175610170366004610f27565b61051b565b60405161010391906112ba565b61018a610530565b6040516101039190611261565b6100e16101a5366004610f27565b61059f565b6101bd6101b836600461109d565b610642565b6040516101039190611390565b6101d26106bc565b6101db81610705565b50565b600281815481106101eb57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b61021a6106bc565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff166102585761025861025382610836565b6108d5565b60005b6002548110156102c8578173ffffffffffffffffffffffffffffffffffffffff166002828154811061028957fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614156102c0576102bb82826108dd565b6102c8565b60010161025b565b5050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b6102f06106bc565b6102c882826108dd565b610302610b2c565b60008060606103566004898990508a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092949392505063ffffffff610b4f169050565b8060200190516103699190810190610f5f565b925092509250600061037b8487610b8d565b905060008373ffffffffffffffffffffffffffffffffffffffff1663c2df82e6868a8a8a886040518663ffffffff1660e01b81526004016103c09594939291906111d8565b602060405180830381600087803b1580156103da57600080fd5b505af11580156103ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610412919081019061105d565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fdc1600f30000000000000000000000000000000000000000000000000000000014610498576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048f90611322565b60405180910390fd5b6104a28588610b8d565b6104b2838863ffffffff610c3916565b11156104ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048f90611359565b50505050505050505050565b7fdc1600f3000000000000000000000000000000000000000000000000000000005b90565b60016020526000908152604090205460ff1681565b6060600280548060200260200160405190810160405280929190818152602001828054801561059557602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161056a575b5050505050905090565b6105a76106bc565b73ffffffffffffffffffffffffffffffffffffffff81166105d2576105cd610253610c55565b6101db565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b60008061069460048686905087878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092949392505063ffffffff610b4f169050565b8060200190516106a79190810190610f43565b90506106b38184610b8d565b95945050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610703576000546107039061025390339073ffffffffffffffffffffffffffffffffffffffff16610c8c565b565b73ffffffffffffffffffffffffffffffffffffffff811661072b5761072b610253610d2e565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff16156107655761076561025382610d65565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b606063eb5108a260e01b826040516024016108519190611190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050919050565b805160208201fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff166109165761091661025383610836565b60025481106109315761093161025382600280549050610d80565b8173ffffffffffffffffffffffffffffffffffffffff166002828154811061095557fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16146109b7576109b76102536002838154811061098f57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1684610d9d565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110610a3257fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff9092169183908110610a6557fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190610ae49082610e99565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b3360009081526001602052604090205460ff166107035761070361025333610dba565b606081831115610b6857610b6861025360008585610dd5565b8351821115610b8157610b816102536001848751610dd5565b50819003910190815290565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff8416906370a0823190610be2908590600401611190565b60206040518083038186803b158015610bfa57600080fd5b505afa158015610c0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c329190810190611178565b9392505050565b600082820183811015610c3257610c3261025360008686610e7a565b60408051808201909152600481527fe69edc3e00000000000000000000000000000000000000000000000000000000602082015290565b6060631de45ad160e01b8383604051602401610ca99291906111b1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905092915050565b60408051808201909152600481527f57654fe400000000000000000000000000000000000000000000000000000000602082015290565b606063de16f1a060e01b826040516024016108519190611190565b606063e9f8377160e01b8383604051602401610ca9929190611399565b606063140a84db60e01b8383604051602401610ca99291906111b1565b606063b65a25b960e01b826040516024016108519190611190565b6060632800659560e01b848484604051602401610df493929190611314565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290509392505050565b606063e946c1bb60e01b848484604051602401610df4939291906112f2565b815481835581811115610ebd57600083815260209020610ebd918101908301610ec2565b505050565b61051891905b80821115610edc5760008155600101610ec8565b5090565b60008083601f840112610ef1578182fd5b50813567ffffffffffffffff811115610f08578182fd5b602083019150836020828501011115610f2057600080fd5b9250929050565b600060208284031215610f38578081fd5b8135610c32816113fe565b600060208284031215610f54578081fd5b8151610c32816113fe565b600080600060608486031215610f73578182fd5b8351610f7e816113fe565b6020850151909350610f8f816113fe565b604085015190925067ffffffffffffffff80821115610fac578283fd5b81860187601f820112610fbd578384fd5b8051925081831115610fcd578384fd5b610ffe60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116016113a7565b9150828252876020848301011115611014578384fd5b6110258360208401602084016113ce565b5080925050509250925092565b60008060408385031215611044578182fd5b823561104f816113fe565b946020939093013593505050565b60006020828403121561106e578081fd5b81517fffffffff0000000000000000000000000000000000000000000000000000000081168114610c32578182fd5b6000806000604084860312156110b1578283fd5b833567ffffffffffffffff8111156110c7578384fd5b6110d386828701610ee0565b90945092505060208401356110e7816113fe565b809150509250925092565b600080600080600060808688031215611109578081fd5b853567ffffffffffffffff81111561111f578182fd5b61112b88828901610ee0565b909650945050602086013561113f816113fe565b9250604086013561114f816113fe565b949793965091946060013592915050565b600060208284031215611171578081fd5b5035919050565b600060208284031215611189578081fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b600073ffffffffffffffffffffffffffffffffffffffff8088168352808716602084015280861660408401525083606083015260a0608083015282518060a084015261122b8160c08501602087016113ce565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160c0019695505050505050565b602080825282518282018190526000918401906040840190835b818110156112af57835173ffffffffffffffffffffffffffffffffffffffff1683526020938401939092019160010161127b565b509095945050505050565b901515815260200190565b7fffffffff0000000000000000000000000000000000000000000000000000000091909116815260200190565b606081016004851061130057fe5b938152602081019290925260409091015290565b606081016008851061130057fe5b6020808252600d908201527f4252494447455f4641494c454400000000000000000000000000000000000000604082015260600190565b6020808252600f908201527f4252494447455f554e4445525041590000000000000000000000000000000000604082015260600190565b90815260200190565b918252602082015260400190565b60405181810167ffffffffffffffff811182821017156113c657600080fd5b604052919050565b60005b838110156113e95781810151838201526020016113d1565b838111156113f8576000848401525b50505050565b73ffffffffffffffffffffffffffffffffffffffff811681146101db57600080fdfea365627a7a723158208443fe55d18b7dc9cff24ff524db866409ee96cb967c5e055d122b01700b898d6c6578706572696d656e74616cf564736f6c634300050c0040" + "object": "0x6080604052600080546001600160a01b03191633179055611463806100256000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c8063a85e59e411610081578063d39de6e91161005b578063d39de6e914610182578063f2fde38b14610197578063fc124ebd146101aa576100c9565b8063a85e59e41461013a578063ae25532e1461014d578063b918161114610162576100c9565b806370712939116100b2578063707129391461010c5780638da5cb5b1461011f5780639ad2674414610127576100c9565b806342f1181e146100ce578063494503d4146100e3575b600080fd5b6100e16100dc366004610f27565b6101ca565b005b6100f66100f1366004611160565b6101de565b6040516101039190611190565b60405180910390f35b6100e161011a366004610f27565b610212565b6100f66102cc565b6100e1610135366004611032565b6102e8565b6100e16101483660046110f2565b6102fa565b6101556104f6565b60405161010391906112c5565b610175610170366004610f27565b61051b565b60405161010391906112ba565b61018a610530565b6040516101039190611261565b6100e16101a5366004610f27565b61059f565b6101bd6101b836600461109d565b610642565b6040516101039190611390565b6101d26106bc565b6101db81610705565b50565b600281815481106101eb57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b61021a6106bc565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff166102585761025861025382610836565b6108d5565b60005b6002548110156102c8578173ffffffffffffffffffffffffffffffffffffffff166002828154811061028957fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614156102c0576102bb82826108dd565b6102c8565b60010161025b565b5050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b6102f06106bc565b6102c882826108dd565b610302610b2c565b60008060606103566004898990508a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092949392505063ffffffff610b4f169050565b8060200190516103699190810190610f5f565b925092509250600061037b8487610b8d565b905060008373ffffffffffffffffffffffffffffffffffffffff1663c2df82e6868a8a8a886040518663ffffffff1660e01b81526004016103c09594939291906111d8565b602060405180830381600087803b1580156103da57600080fd5b505af11580156103ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610412919081019061105d565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fdc1600f30000000000000000000000000000000000000000000000000000000014610498576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048f90611322565b60405180910390fd5b6104a28588610b8d565b6104b2838863ffffffff610c3916565b11156104ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048f90611359565b50505050505050505050565b7fdc1600f3000000000000000000000000000000000000000000000000000000005b90565b60016020526000908152604090205460ff1681565b6060600280548060200260200160405190810160405280929190818152602001828054801561059557602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161056a575b5050505050905090565b6105a76106bc565b73ffffffffffffffffffffffffffffffffffffffff81166105d2576105cd610253610c55565b6101db565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b60008061069460048686905087878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092949392505063ffffffff610b4f169050565b8060200190516106a79190810190610f43565b90506106b38184610b8d565b95945050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610703576000546107039061025390339073ffffffffffffffffffffffffffffffffffffffff16610c8c565b565b73ffffffffffffffffffffffffffffffffffffffff811661072b5761072b610253610d2e565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff16156107655761076561025382610d65565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b606063eb5108a260e01b826040516024016108519190611190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050919050565b805160208201fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff166109165761091661025383610836565b60025481106109315761093161025382600280549050610d80565b8173ffffffffffffffffffffffffffffffffffffffff166002828154811061095557fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16146109b7576109b76102536002838154811061098f57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1684610d9d565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110610a3257fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff9092169183908110610a6557fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190610ae49082610e99565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b3360009081526001602052604090205460ff166107035761070361025333610dba565b606081831115610b6857610b6861025360008585610dd5565b8351821115610b8157610b816102536001848751610dd5565b50819003910190815290565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff8416906370a0823190610be2908590600401611190565b60206040518083038186803b158015610bfa57600080fd5b505afa158015610c0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c329190810190611178565b9392505050565b600082820183811015610c3257610c3261025360008686610e7a565b60408051808201909152600481527fe69edc3e00000000000000000000000000000000000000000000000000000000602082015290565b6060631de45ad160e01b8383604051602401610ca99291906111b1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905092915050565b60408051808201909152600481527f57654fe400000000000000000000000000000000000000000000000000000000602082015290565b606063de16f1a060e01b826040516024016108519190611190565b606063e9f8377160e01b8383604051602401610ca9929190611399565b606063140a84db60e01b8383604051602401610ca99291906111b1565b606063b65a25b960e01b826040516024016108519190611190565b6060632800659560e01b848484604051602401610df493929190611314565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290509392505050565b606063e946c1bb60e01b848484604051602401610df4939291906112f2565b815481835581811115610ebd57600083815260209020610ebd918101908301610ec2565b505050565b61051891905b80821115610edc5760008155600101610ec8565b5090565b60008083601f840112610ef1578182fd5b50813567ffffffffffffffff811115610f08578182fd5b602083019150836020828501011115610f2057600080fd5b9250929050565b600060208284031215610f38578081fd5b8135610c32816113fe565b600060208284031215610f54578081fd5b8151610c32816113fe565b600080600060608486031215610f73578182fd5b8351610f7e816113fe565b6020850151909350610f8f816113fe565b604085015190925067ffffffffffffffff80821115610fac578283fd5b81860187601f820112610fbd578384fd5b8051925081831115610fcd578384fd5b610ffe60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116016113a7565b9150828252876020848301011115611014578384fd5b6110258360208401602084016113ce565b5080925050509250925092565b60008060408385031215611044578182fd5b823561104f816113fe565b946020939093013593505050565b60006020828403121561106e578081fd5b81517fffffffff0000000000000000000000000000000000000000000000000000000081168114610c32578182fd5b6000806000604084860312156110b1578283fd5b833567ffffffffffffffff8111156110c7578384fd5b6110d386828701610ee0565b90945092505060208401356110e7816113fe565b809150509250925092565b600080600080600060808688031215611109578081fd5b853567ffffffffffffffff81111561111f578182fd5b61112b88828901610ee0565b909650945050602086013561113f816113fe565b9250604086013561114f816113fe565b949793965091946060013592915050565b600060208284031215611171578081fd5b5035919050565b600060208284031215611189578081fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b600073ffffffffffffffffffffffffffffffffffffffff8088168352808716602084015280861660408401525083606083015260a0608083015282518060a084015261122b8160c08501602087016113ce565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160c0019695505050505050565b602080825282518282018190526000918401906040840190835b818110156112af57835173ffffffffffffffffffffffffffffffffffffffff1683526020938401939092019160010161127b565b509095945050505050565b901515815260200190565b7fffffffff0000000000000000000000000000000000000000000000000000000091909116815260200190565b606081016004851061130057fe5b938152602081019290925260409091015290565b606081016008851061130057fe5b6020808252600d908201527f4252494447455f4641494c454400000000000000000000000000000000000000604082015260600190565b6020808252600f908201527f4252494447455f554e4445525041590000000000000000000000000000000000604082015260600190565b90815260200190565b918252602082015260400190565b60405181810167ffffffffffffffff811182821017156113c657600080fd5b604052919050565b60005b838110156113e95781810151838201526020016113d1565b838111156113f8576000848401525b50505050565b73ffffffffffffffffffffffffffffffffffffffff811681146101db57600080fdfea365627a7a72315820f3e0e666f1b073e911f7e90f5402365ad8141bf7a59ba19c0e30ed91dbe5a4be6c6578706572696d656e74616cf564736f6c63430005100040" }, "deployedBytecode": { - "object": "0x608060405234801561001057600080fd5b50600436106100c95760003560e01c8063a85e59e411610081578063d39de6e91161005b578063d39de6e914610182578063f2fde38b14610197578063fc124ebd146101aa576100c9565b8063a85e59e41461013a578063ae25532e1461014d578063b918161114610162576100c9565b806370712939116100b2578063707129391461010c5780638da5cb5b1461011f5780639ad2674414610127576100c9565b806342f1181e146100ce578063494503d4146100e3575b600080fd5b6100e16100dc366004610f27565b6101ca565b005b6100f66100f1366004611160565b6101de565b6040516101039190611190565b60405180910390f35b6100e161011a366004610f27565b610212565b6100f66102cc565b6100e1610135366004611032565b6102e8565b6100e16101483660046110f2565b6102fa565b6101556104f6565b60405161010391906112c5565b610175610170366004610f27565b61051b565b60405161010391906112ba565b61018a610530565b6040516101039190611261565b6100e16101a5366004610f27565b61059f565b6101bd6101b836600461109d565b610642565b6040516101039190611390565b6101d26106bc565b6101db81610705565b50565b600281815481106101eb57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b61021a6106bc565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff166102585761025861025382610836565b6108d5565b60005b6002548110156102c8578173ffffffffffffffffffffffffffffffffffffffff166002828154811061028957fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614156102c0576102bb82826108dd565b6102c8565b60010161025b565b5050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b6102f06106bc565b6102c882826108dd565b610302610b2c565b60008060606103566004898990508a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092949392505063ffffffff610b4f169050565b8060200190516103699190810190610f5f565b925092509250600061037b8487610b8d565b905060008373ffffffffffffffffffffffffffffffffffffffff1663c2df82e6868a8a8a886040518663ffffffff1660e01b81526004016103c09594939291906111d8565b602060405180830381600087803b1580156103da57600080fd5b505af11580156103ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610412919081019061105d565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fdc1600f30000000000000000000000000000000000000000000000000000000014610498576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048f90611322565b60405180910390fd5b6104a28588610b8d565b6104b2838863ffffffff610c3916565b11156104ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048f90611359565b50505050505050505050565b7fdc1600f3000000000000000000000000000000000000000000000000000000005b90565b60016020526000908152604090205460ff1681565b6060600280548060200260200160405190810160405280929190818152602001828054801561059557602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161056a575b5050505050905090565b6105a76106bc565b73ffffffffffffffffffffffffffffffffffffffff81166105d2576105cd610253610c55565b6101db565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b60008061069460048686905087878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092949392505063ffffffff610b4f169050565b8060200190516106a79190810190610f43565b90506106b38184610b8d565b95945050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610703576000546107039061025390339073ffffffffffffffffffffffffffffffffffffffff16610c8c565b565b73ffffffffffffffffffffffffffffffffffffffff811661072b5761072b610253610d2e565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff16156107655761076561025382610d65565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b606063eb5108a260e01b826040516024016108519190611190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050919050565b805160208201fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff166109165761091661025383610836565b60025481106109315761093161025382600280549050610d80565b8173ffffffffffffffffffffffffffffffffffffffff166002828154811061095557fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16146109b7576109b76102536002838154811061098f57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1684610d9d565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110610a3257fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff9092169183908110610a6557fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190610ae49082610e99565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b3360009081526001602052604090205460ff166107035761070361025333610dba565b606081831115610b6857610b6861025360008585610dd5565b8351821115610b8157610b816102536001848751610dd5565b50819003910190815290565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff8416906370a0823190610be2908590600401611190565b60206040518083038186803b158015610bfa57600080fd5b505afa158015610c0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c329190810190611178565b9392505050565b600082820183811015610c3257610c3261025360008686610e7a565b60408051808201909152600481527fe69edc3e00000000000000000000000000000000000000000000000000000000602082015290565b6060631de45ad160e01b8383604051602401610ca99291906111b1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905092915050565b60408051808201909152600481527f57654fe400000000000000000000000000000000000000000000000000000000602082015290565b606063de16f1a060e01b826040516024016108519190611190565b606063e9f8377160e01b8383604051602401610ca9929190611399565b606063140a84db60e01b8383604051602401610ca99291906111b1565b606063b65a25b960e01b826040516024016108519190611190565b6060632800659560e01b848484604051602401610df493929190611314565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290509392505050565b606063e946c1bb60e01b848484604051602401610df4939291906112f2565b815481835581811115610ebd57600083815260209020610ebd918101908301610ec2565b505050565b61051891905b80821115610edc5760008155600101610ec8565b5090565b60008083601f840112610ef1578182fd5b50813567ffffffffffffffff811115610f08578182fd5b602083019150836020828501011115610f2057600080fd5b9250929050565b600060208284031215610f38578081fd5b8135610c32816113fe565b600060208284031215610f54578081fd5b8151610c32816113fe565b600080600060608486031215610f73578182fd5b8351610f7e816113fe565b6020850151909350610f8f816113fe565b604085015190925067ffffffffffffffff80821115610fac578283fd5b81860187601f820112610fbd578384fd5b8051925081831115610fcd578384fd5b610ffe60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116016113a7565b9150828252876020848301011115611014578384fd5b6110258360208401602084016113ce565b5080925050509250925092565b60008060408385031215611044578182fd5b823561104f816113fe565b946020939093013593505050565b60006020828403121561106e578081fd5b81517fffffffff0000000000000000000000000000000000000000000000000000000081168114610c32578182fd5b6000806000604084860312156110b1578283fd5b833567ffffffffffffffff8111156110c7578384fd5b6110d386828701610ee0565b90945092505060208401356110e7816113fe565b809150509250925092565b600080600080600060808688031215611109578081fd5b853567ffffffffffffffff81111561111f578182fd5b61112b88828901610ee0565b909650945050602086013561113f816113fe565b9250604086013561114f816113fe565b949793965091946060013592915050565b600060208284031215611171578081fd5b5035919050565b600060208284031215611189578081fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b600073ffffffffffffffffffffffffffffffffffffffff8088168352808716602084015280861660408401525083606083015260a0608083015282518060a084015261122b8160c08501602087016113ce565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160c0019695505050505050565b602080825282518282018190526000918401906040840190835b818110156112af57835173ffffffffffffffffffffffffffffffffffffffff1683526020938401939092019160010161127b565b509095945050505050565b901515815260200190565b7fffffffff0000000000000000000000000000000000000000000000000000000091909116815260200190565b606081016004851061130057fe5b938152602081019290925260409091015290565b606081016008851061130057fe5b6020808252600d908201527f4252494447455f4641494c454400000000000000000000000000000000000000604082015260600190565b6020808252600f908201527f4252494447455f554e4445525041590000000000000000000000000000000000604082015260600190565b90815260200190565b918252602082015260400190565b60405181810167ffffffffffffffff811182821017156113c657600080fd5b604052919050565b60005b838110156113e95781810151838201526020016113d1565b838111156113f8576000848401525b50505050565b73ffffffffffffffffffffffffffffffffffffffff811681146101db57600080fdfea365627a7a723158208443fe55d18b7dc9cff24ff524db866409ee96cb967c5e055d122b01700b898d6c6578706572696d656e74616cf564736f6c634300050c0040" + "object": "0x608060405234801561001057600080fd5b50600436106100c95760003560e01c8063a85e59e411610081578063d39de6e91161005b578063d39de6e914610182578063f2fde38b14610197578063fc124ebd146101aa576100c9565b8063a85e59e41461013a578063ae25532e1461014d578063b918161114610162576100c9565b806370712939116100b2578063707129391461010c5780638da5cb5b1461011f5780639ad2674414610127576100c9565b806342f1181e146100ce578063494503d4146100e3575b600080fd5b6100e16100dc366004610f27565b6101ca565b005b6100f66100f1366004611160565b6101de565b6040516101039190611190565b60405180910390f35b6100e161011a366004610f27565b610212565b6100f66102cc565b6100e1610135366004611032565b6102e8565b6100e16101483660046110f2565b6102fa565b6101556104f6565b60405161010391906112c5565b610175610170366004610f27565b61051b565b60405161010391906112ba565b61018a610530565b6040516101039190611261565b6100e16101a5366004610f27565b61059f565b6101bd6101b836600461109d565b610642565b6040516101039190611390565b6101d26106bc565b6101db81610705565b50565b600281815481106101eb57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b61021a6106bc565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff166102585761025861025382610836565b6108d5565b60005b6002548110156102c8578173ffffffffffffffffffffffffffffffffffffffff166002828154811061028957fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614156102c0576102bb82826108dd565b6102c8565b60010161025b565b5050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b6102f06106bc565b6102c882826108dd565b610302610b2c565b60008060606103566004898990508a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092949392505063ffffffff610b4f169050565b8060200190516103699190810190610f5f565b925092509250600061037b8487610b8d565b905060008373ffffffffffffffffffffffffffffffffffffffff1663c2df82e6868a8a8a886040518663ffffffff1660e01b81526004016103c09594939291906111d8565b602060405180830381600087803b1580156103da57600080fd5b505af11580156103ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610412919081019061105d565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fdc1600f30000000000000000000000000000000000000000000000000000000014610498576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048f90611322565b60405180910390fd5b6104a28588610b8d565b6104b2838863ffffffff610c3916565b11156104ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048f90611359565b50505050505050505050565b7fdc1600f3000000000000000000000000000000000000000000000000000000005b90565b60016020526000908152604090205460ff1681565b6060600280548060200260200160405190810160405280929190818152602001828054801561059557602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161056a575b5050505050905090565b6105a76106bc565b73ffffffffffffffffffffffffffffffffffffffff81166105d2576105cd610253610c55565b6101db565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b60008061069460048686905087878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092949392505063ffffffff610b4f169050565b8060200190516106a79190810190610f43565b90506106b38184610b8d565b95945050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610703576000546107039061025390339073ffffffffffffffffffffffffffffffffffffffff16610c8c565b565b73ffffffffffffffffffffffffffffffffffffffff811661072b5761072b610253610d2e565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff16156107655761076561025382610d65565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b606063eb5108a260e01b826040516024016108519190611190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050919050565b805160208201fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff166109165761091661025383610836565b60025481106109315761093161025382600280549050610d80565b8173ffffffffffffffffffffffffffffffffffffffff166002828154811061095557fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16146109b7576109b76102536002838154811061098f57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1684610d9d565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110610a3257fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff9092169183908110610a6557fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190610ae49082610e99565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b3360009081526001602052604090205460ff166107035761070361025333610dba565b606081831115610b6857610b6861025360008585610dd5565b8351821115610b8157610b816102536001848751610dd5565b50819003910190815290565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff8416906370a0823190610be2908590600401611190565b60206040518083038186803b158015610bfa57600080fd5b505afa158015610c0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c329190810190611178565b9392505050565b600082820183811015610c3257610c3261025360008686610e7a565b60408051808201909152600481527fe69edc3e00000000000000000000000000000000000000000000000000000000602082015290565b6060631de45ad160e01b8383604051602401610ca99291906111b1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905092915050565b60408051808201909152600481527f57654fe400000000000000000000000000000000000000000000000000000000602082015290565b606063de16f1a060e01b826040516024016108519190611190565b606063e9f8377160e01b8383604051602401610ca9929190611399565b606063140a84db60e01b8383604051602401610ca99291906111b1565b606063b65a25b960e01b826040516024016108519190611190565b6060632800659560e01b848484604051602401610df493929190611314565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290509392505050565b606063e946c1bb60e01b848484604051602401610df4939291906112f2565b815481835581811115610ebd57600083815260209020610ebd918101908301610ec2565b505050565b61051891905b80821115610edc5760008155600101610ec8565b5090565b60008083601f840112610ef1578182fd5b50813567ffffffffffffffff811115610f08578182fd5b602083019150836020828501011115610f2057600080fd5b9250929050565b600060208284031215610f38578081fd5b8135610c32816113fe565b600060208284031215610f54578081fd5b8151610c32816113fe565b600080600060608486031215610f73578182fd5b8351610f7e816113fe565b6020850151909350610f8f816113fe565b604085015190925067ffffffffffffffff80821115610fac578283fd5b81860187601f820112610fbd578384fd5b8051925081831115610fcd578384fd5b610ffe60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116016113a7565b9150828252876020848301011115611014578384fd5b6110258360208401602084016113ce565b5080925050509250925092565b60008060408385031215611044578182fd5b823561104f816113fe565b946020939093013593505050565b60006020828403121561106e578081fd5b81517fffffffff0000000000000000000000000000000000000000000000000000000081168114610c32578182fd5b6000806000604084860312156110b1578283fd5b833567ffffffffffffffff8111156110c7578384fd5b6110d386828701610ee0565b90945092505060208401356110e7816113fe565b809150509250925092565b600080600080600060808688031215611109578081fd5b853567ffffffffffffffff81111561111f578182fd5b61112b88828901610ee0565b909650945050602086013561113f816113fe565b9250604086013561114f816113fe565b949793965091946060013592915050565b600060208284031215611171578081fd5b5035919050565b600060208284031215611189578081fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b600073ffffffffffffffffffffffffffffffffffffffff8088168352808716602084015280861660408401525083606083015260a0608083015282518060a084015261122b8160c08501602087016113ce565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160c0019695505050505050565b602080825282518282018190526000918401906040840190835b818110156112af57835173ffffffffffffffffffffffffffffffffffffffff1683526020938401939092019160010161127b565b509095945050505050565b901515815260200190565b7fffffffff0000000000000000000000000000000000000000000000000000000091909116815260200190565b606081016004851061130057fe5b938152602081019290925260409091015290565b606081016008851061130057fe5b6020808252600d908201527f4252494447455f4641494c454400000000000000000000000000000000000000604082015260600190565b6020808252600f908201527f4252494447455f554e4445525041590000000000000000000000000000000000604082015260600190565b90815260200190565b918252602082015260400190565b60405181810167ffffffffffffffff811182821017156113c657600080fd5b604052919050565b60005b838110156113e95781810151838201526020016113d1565b838111156113f8576000848401525b50505050565b73ffffffffffffffffffffffffffffffffffffffff811681146101db57600080fdfea365627a7a72315820f3e0e666f1b073e911f7e90f5402365ad8141bf7a59ba19c0e30ed91dbe5a4be6c6578706572696d656e74616cf564736f6c63430005100040" } } }, "compiler": { "name": "solc", - "version": "soljson-v0.5.12+commit.7709ece9.js", + "version": "soljson-v0.5.16+commit.9c3226ce.js", "settings": { "optimizer": { "enabled": true, @@ -211,7 +215,7 @@ ] } }, - "evmVersion": "constantinople" + "evmVersion": "istanbul" } }, "chains": {} diff --git a/packages/contract-artifacts/artifacts/ERC20Proxy.json b/packages/contract-artifacts/artifacts/ERC20Proxy.json index 100abe8493..7640022f15 100644 --- a/packages/contract-artifacts/artifacts/ERC20Proxy.json +++ b/packages/contract-artifacts/artifacts/ERC20Proxy.json @@ -3,6 +3,34 @@ "contractName": "ERC20Proxy", "compilerOutput": { "abi": [ + { + "anonymous": false, + "inputs": [ + { "indexed": true, "internalType": "address", "name": "target", "type": "address" }, + { "indexed": true, "internalType": "address", "name": "caller", "type": "address" } + ], + "name": "AuthorizedAddressAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "internalType": "address", "name": "target", "type": "address" }, + { "indexed": true, "internalType": "address", "name": "caller", "type": "address" } + ], + "name": "AuthorizedAddressRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, + { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { "payable": false, "stateMutability": "nonpayable", "type": "fallback" }, { "constant": false, "inputs": [{ "internalType": "address", "name": "target", "type": "address" }], @@ -21,45 +49,6 @@ "stateMutability": "view", "type": "function" }, - { - "constant": false, - "inputs": [{ "internalType": "address", "name": "target", "type": "address" }], - "name": "removeAuthorizedAddress", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "owner", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { "internalType": "address", "name": "target", "type": "address" }, - { "internalType": "uint256", "name": "index", "type": "uint256" } - ], - "name": "removeAuthorizedAddressAtIndex", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getProxyId", - "outputs": [{ "internalType": "bytes4", "name": "", "type": "bytes4" }], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, { "constant": true, "inputs": [{ "internalType": "address", "name": "", "type": "address" }], @@ -78,6 +67,45 @@ "stateMutability": "view", "type": "function" }, + { + "constant": true, + "inputs": [], + "name": "getProxyId", + "outputs": [{ "internalType": "bytes4", "name": "", "type": "bytes4" }], + "payable": false, + "stateMutability": "pure", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "owner", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [{ "internalType": "address", "name": "target", "type": "address" }], + "name": "removeAuthorizedAddress", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { "internalType": "address", "name": "target", "type": "address" }, + { "internalType": "uint256", "name": "index", "type": "uint256" } + ], + "name": "removeAuthorizedAddressAtIndex", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, { "constant": false, "inputs": [{ "internalType": "address", "name": "newOwner", "type": "address" }], @@ -86,25 +114,6 @@ "payable": false, "stateMutability": "nonpayable", "type": "function" - }, - { "payable": false, "stateMutability": "nonpayable", "type": "fallback" }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "target", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "caller", "type": "address" } - ], - "name": "AuthorizedAddressAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "target", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "caller", "type": "address" } - ], - "name": "AuthorizedAddressRemoved", - "type": "event" } ], "devdoc": { @@ -136,16 +145,16 @@ }, "evm": { "bytecode": { - "object": "0x6080604052600080546001600160a01b03191633179055610f42806100256000396000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c80639ad2674411610076578063b91816111161005b578063b918161114610374578063d39de6e9146103bb578063f2fde38b14610413576100a3565b80639ad26744146102fe578063ae25532e14610337576100a3565b806342f1181e14610248578063494503d41461027d57806370712939146102c35780638da5cb5b146102f6575b7fffffffff00000000000000000000000000000000000000000000000000000000600035167fa85e59e40000000000000000000000000000000000000000000000000000000081141561024257604080513381526001602082015290812054610177577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c1553454e4445525f4e4f545f415554484f52495a454400000000000000604052600060605260646000fd5b50602860043501357f23b872dd0000000000000000000000000000000000000000000000000000000060005260606024600437602060006064600080855af1600080511160203d14163d15178116905080156101cf57005b50507f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c0f5452414e534645525f4641494c454400000000000000000000000000604052600060605260646000fd5b50600080fd5b61027b6004803603602081101561025e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610446565b005b61029a6004803603602081101561029357600080fd5b5035610632565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61027b600480360360208110156102d957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610666565b61029a610959565b61027b6004803603604081101561031457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610975565b61033f610d26565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b6103a76004803603602081101561038a57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610d5c565b604080519115158252519081900360200190f35b6103c3610d71565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103ff5781810151838201526020016103e7565b505050509050019250505060405180910390f35b61027b6004803603602081101561042957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610de0565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104cc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff161561056157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5441524745545f414c52454144595f415554484f52495a454400000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b6002818154811061063f57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106ec57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff1661078057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116600090815260016020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b600254811015610912578173ffffffffffffffffffffffffffffffffffffffff16600282815481106107fa57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561090a57600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061085257fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff909216918390811061088557fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01906109049082610ec6565b50610912565b6001016107cc565b50604051339073ffffffffffffffffffffffffffffffffffffffff8316907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a350565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff1633146109fb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff16610a8f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b6002548110610aff57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f494e4445585f4f55545f4f465f424f554e445300000000000000000000000000604482015290519081900360640190fd5b8173ffffffffffffffffffffffffffffffffffffffff1660028281548110610b2357fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614610bb157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f415554484f52495a45445f414444524553535f4d49534d415443480000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110610c2c57fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff9092169183908110610c5f57fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190610cde9082610ec6565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b604080517f4552433230546f6b656e28616464726573732900000000000000000000000000815290519081900360130190205b90565b60016020526000908152604090205460ff1681565b60606002805480602002602001604051908101604052809291908181526020018280548015610dd657602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610dab575b5050505050905090565b60005473ffffffffffffffffffffffffffffffffffffffff163314610e6657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811615610ec357600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b815481835581811115610eea57600083815260209020610eea918101908301610eef565b505050565b610d5991905b80821115610f095760008155600101610ef5565b509056fea265627a7a72315820cb3312567959522bd12ea03b9812cab2bace85fe5f172b3ae8014b3eacc85fa864736f6c634300050b0032" + "object": "0x6080604052600080546001600160a01b03191633179055610f42806100256000396000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c80639ad2674411610076578063b91816111161005b578063b918161114610374578063d39de6e9146103bb578063f2fde38b14610413576100a3565b80639ad26744146102fe578063ae25532e14610337576100a3565b806342f1181e14610248578063494503d41461027d57806370712939146102c35780638da5cb5b146102f6575b7fffffffff00000000000000000000000000000000000000000000000000000000600035167fa85e59e40000000000000000000000000000000000000000000000000000000081141561024257604080513381526001602082015290812054610177577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c1553454e4445525f4e4f545f415554484f52495a454400000000000000604052600060605260646000fd5b50602860043501357f23b872dd0000000000000000000000000000000000000000000000000000000060005260606024600437602060006064600080855af1600080511160203d14163d15178116905080156101cf57005b50507f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c0f5452414e534645525f4641494c454400000000000000000000000000604052600060605260646000fd5b50600080fd5b61027b6004803603602081101561025e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610446565b005b61029a6004803603602081101561029357600080fd5b5035610632565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61027b600480360360208110156102d957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610666565b61029a610959565b61027b6004803603604081101561031457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610975565b61033f610d26565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b6103a76004803603602081101561038a57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610d5c565b604080519115158252519081900360200190f35b6103c3610d71565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103ff5781810151838201526020016103e7565b505050509050019250505060405180910390f35b61027b6004803603602081101561042957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610de0565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104cc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff161561056157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5441524745545f414c52454144595f415554484f52495a454400000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b6002818154811061063f57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106ec57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff1661078057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116600090815260016020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b600254811015610912578173ffffffffffffffffffffffffffffffffffffffff16600282815481106107fa57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561090a57600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061085257fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff909216918390811061088557fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01906109049082610ec6565b50610912565b6001016107cc565b50604051339073ffffffffffffffffffffffffffffffffffffffff8316907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a350565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff1633146109fb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff16610a8f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b6002548110610aff57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f494e4445585f4f55545f4f465f424f554e445300000000000000000000000000604482015290519081900360640190fd5b8173ffffffffffffffffffffffffffffffffffffffff1660028281548110610b2357fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614610bb157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f415554484f52495a45445f414444524553535f4d49534d415443480000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110610c2c57fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff9092169183908110610c5f57fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190610cde9082610ec6565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b604080517f4552433230546f6b656e28616464726573732900000000000000000000000000815290519081900360130190205b90565b60016020526000908152604090205460ff1681565b60606002805480602002602001604051908101604052809291908181526020018280548015610dd657602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610dab575b5050505050905090565b60005473ffffffffffffffffffffffffffffffffffffffff163314610e6657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811615610ec357600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b815481835581811115610eea57600083815260209020610eea918101908301610eef565b505050565b610d5991905b80821115610f095760008155600101610ef5565b509056fea265627a7a723158204bb37ca9e295277efa1a86c8c8657d2e244a36136b4ec9d6b503ee59e784d07864736f6c63430005100032" }, "deployedBytecode": { - "object": "0x608060405234801561001057600080fd5b50600436106100a35760003560e01c80639ad2674411610076578063b91816111161005b578063b918161114610374578063d39de6e9146103bb578063f2fde38b14610413576100a3565b80639ad26744146102fe578063ae25532e14610337576100a3565b806342f1181e14610248578063494503d41461027d57806370712939146102c35780638da5cb5b146102f6575b7fffffffff00000000000000000000000000000000000000000000000000000000600035167fa85e59e40000000000000000000000000000000000000000000000000000000081141561024257604080513381526001602082015290812054610177577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c1553454e4445525f4e4f545f415554484f52495a454400000000000000604052600060605260646000fd5b50602860043501357f23b872dd0000000000000000000000000000000000000000000000000000000060005260606024600437602060006064600080855af1600080511160203d14163d15178116905080156101cf57005b50507f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c0f5452414e534645525f4641494c454400000000000000000000000000604052600060605260646000fd5b50600080fd5b61027b6004803603602081101561025e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610446565b005b61029a6004803603602081101561029357600080fd5b5035610632565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61027b600480360360208110156102d957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610666565b61029a610959565b61027b6004803603604081101561031457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610975565b61033f610d26565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b6103a76004803603602081101561038a57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610d5c565b604080519115158252519081900360200190f35b6103c3610d71565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103ff5781810151838201526020016103e7565b505050509050019250505060405180910390f35b61027b6004803603602081101561042957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610de0565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104cc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff161561056157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5441524745545f414c52454144595f415554484f52495a454400000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b6002818154811061063f57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106ec57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff1661078057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116600090815260016020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b600254811015610912578173ffffffffffffffffffffffffffffffffffffffff16600282815481106107fa57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561090a57600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061085257fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff909216918390811061088557fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01906109049082610ec6565b50610912565b6001016107cc565b50604051339073ffffffffffffffffffffffffffffffffffffffff8316907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a350565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff1633146109fb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff16610a8f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b6002548110610aff57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f494e4445585f4f55545f4f465f424f554e445300000000000000000000000000604482015290519081900360640190fd5b8173ffffffffffffffffffffffffffffffffffffffff1660028281548110610b2357fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614610bb157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f415554484f52495a45445f414444524553535f4d49534d415443480000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110610c2c57fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff9092169183908110610c5f57fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190610cde9082610ec6565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b604080517f4552433230546f6b656e28616464726573732900000000000000000000000000815290519081900360130190205b90565b60016020526000908152604090205460ff1681565b60606002805480602002602001604051908101604052809291908181526020018280548015610dd657602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610dab575b5050505050905090565b60005473ffffffffffffffffffffffffffffffffffffffff163314610e6657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811615610ec357600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b815481835581811115610eea57600083815260209020610eea918101908301610eef565b505050565b610d5991905b80821115610f095760008155600101610ef5565b509056fea265627a7a72315820cb3312567959522bd12ea03b9812cab2bace85fe5f172b3ae8014b3eacc85fa864736f6c634300050b0032" + "object": "0x608060405234801561001057600080fd5b50600436106100a35760003560e01c80639ad2674411610076578063b91816111161005b578063b918161114610374578063d39de6e9146103bb578063f2fde38b14610413576100a3565b80639ad26744146102fe578063ae25532e14610337576100a3565b806342f1181e14610248578063494503d41461027d57806370712939146102c35780638da5cb5b146102f6575b7fffffffff00000000000000000000000000000000000000000000000000000000600035167fa85e59e40000000000000000000000000000000000000000000000000000000081141561024257604080513381526001602082015290812054610177577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c1553454e4445525f4e4f545f415554484f52495a454400000000000000604052600060605260646000fd5b50602860043501357f23b872dd0000000000000000000000000000000000000000000000000000000060005260606024600437602060006064600080855af1600080511160203d14163d15178116905080156101cf57005b50507f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c0f5452414e534645525f4641494c454400000000000000000000000000604052600060605260646000fd5b50600080fd5b61027b6004803603602081101561025e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610446565b005b61029a6004803603602081101561029357600080fd5b5035610632565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61027b600480360360208110156102d957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610666565b61029a610959565b61027b6004803603604081101561031457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610975565b61033f610d26565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b6103a76004803603602081101561038a57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610d5c565b604080519115158252519081900360200190f35b6103c3610d71565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103ff5781810151838201526020016103e7565b505050509050019250505060405180910390f35b61027b6004803603602081101561042957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610de0565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104cc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff161561056157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5441524745545f414c52454144595f415554484f52495a454400000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b6002818154811061063f57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106ec57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff1661078057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116600090815260016020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b600254811015610912578173ffffffffffffffffffffffffffffffffffffffff16600282815481106107fa57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561090a57600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061085257fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff909216918390811061088557fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01906109049082610ec6565b50610912565b6001016107cc565b50604051339073ffffffffffffffffffffffffffffffffffffffff8316907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a350565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff1633146109fb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff16610a8f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b6002548110610aff57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f494e4445585f4f55545f4f465f424f554e445300000000000000000000000000604482015290519081900360640190fd5b8173ffffffffffffffffffffffffffffffffffffffff1660028281548110610b2357fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614610bb157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f415554484f52495a45445f414444524553535f4d49534d415443480000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110610c2c57fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff9092169183908110610c5f57fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190610cde9082610ec6565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b604080517f4552433230546f6b656e28616464726573732900000000000000000000000000815290519081900360130190205b90565b60016020526000908152604090205460ff1681565b60606002805480602002602001604051908101604052809291908181526020018280548015610dd657602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610dab575b5050505050905090565b60005473ffffffffffffffffffffffffffffffffffffffff163314610e6657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811615610ec357600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b815481835581811115610eea57600083815260209020610eea918101908301610eef565b505050565b610d5991905b80821115610f095760008155600101610ef5565b509056fea265627a7a723158204bb37ca9e295277efa1a86c8c8657d2e244a36136b4ec9d6b503ee59e784d07864736f6c63430005100032" } } }, "compiler": { "name": "solc", - "version": "soljson-v0.5.11+commit.c082d0b4.js", + "version": "soljson-v0.5.16+commit.9c3226ce.js", "settings": { "optimizer": { "enabled": true, @@ -164,8 +173,8 @@ ] } }, - "evmVersion": "constantinople" + "evmVersion": "istanbul" } }, - "networks": {} + "chains": {} } diff --git a/packages/contract-artifacts/artifacts/ERC20Token.json b/packages/contract-artifacts/artifacts/ERC20Token.json index 40003b47ed..879e3fa59b 100644 --- a/packages/contract-artifacts/artifacts/ERC20Token.json +++ b/packages/contract-artifacts/artifacts/ERC20Token.json @@ -3,6 +3,38 @@ "contractName": "ERC20Token", "compilerOutput": { "abi": [ + { + "anonymous": false, + "inputs": [ + { "indexed": true, "internalType": "address", "name": "_owner", "type": "address" }, + { "indexed": true, "internalType": "address", "name": "_spender", "type": "address" }, + { "indexed": false, "internalType": "uint256", "name": "_value", "type": "uint256" } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "internalType": "address", "name": "_from", "type": "address" }, + { "indexed": true, "internalType": "address", "name": "_to", "type": "address" }, + { "indexed": false, "internalType": "uint256", "name": "_value", "type": "uint256" } + ], + "name": "Transfer", + "type": "event" + }, + { + "constant": true, + "inputs": [ + { "internalType": "address", "name": "_owner", "type": "address" }, + { "internalType": "address", "name": "_spender", "type": "address" } + ], + "name": "allowance", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "payable": false, + "stateMutability": "view", + "type": "function" + }, { "constant": false, "inputs": [ @@ -17,30 +49,17 @@ }, { "constant": true, - "inputs": [], - "name": "totalSupply", + "inputs": [{ "internalType": "address", "name": "_owner", "type": "address" }], + "name": "balanceOf", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "payable": false, "stateMutability": "view", "type": "function" }, - { - "constant": false, - "inputs": [ - { "internalType": "address", "name": "_from", "type": "address" }, - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "uint256", "name": "_value", "type": "uint256" } - ], - "name": "transferFrom", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, { "constant": true, - "inputs": [{ "internalType": "address", "name": "_owner", "type": "address" }], - "name": "balanceOf", + "inputs": [], + "name": "totalSupply", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "payable": false, "stateMutability": "view", @@ -59,36 +78,17 @@ "type": "function" }, { - "constant": true, + "constant": false, "inputs": [ - { "internalType": "address", "name": "_owner", "type": "address" }, - { "internalType": "address", "name": "_spender", "type": "address" } + { "internalType": "address", "name": "_from", "type": "address" }, + { "internalType": "address", "name": "_to", "type": "address" }, + { "internalType": "uint256", "name": "_value", "type": "uint256" } ], - "name": "allowance", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "name": "transferFrom", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], "payable": false, - "stateMutability": "view", + "stateMutability": "nonpayable", "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "_from", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "_to", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "_value", "type": "uint256" } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "_owner", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "_spender", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "_value", "type": "uint256" } - ], - "name": "Approval", - "type": "event" } ], "devdoc": { @@ -135,16 +135,16 @@ }, "evm": { "bytecode": { - "object": "0x608060405234801561001057600080fd5b506106bf806100206000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c806370a082311161005057806370a0823114610121578063a9059cbb14610154578063dd62ed3e1461018d57610072565b8063095ea7b31461007757806318160ddd146100c457806323b872dd146100de575b600080fd5b6100b06004803603604081101561008d57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356101c8565b604080519115158252519081900360200190f35b6100cc61023b565b60408051918252519081900360200190f35b6100b0600480360360608110156100f457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610241565b6100cc6004803603602081101561013757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661049d565b6100b06004803603604081101561016a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356104c5565b6100cc600480360360408110156101a357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610652565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b60025490565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120548211156102d557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f45524332305f494e53554646494349454e545f42414c414e4345000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482111561037457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f45524332305f494e53554646494349454e545f414c4c4f57414e434500000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054828101101561040a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f55494e543235365f4f564552464c4f5700000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff80841660008181526020818152604080832080548801905593881680835284832080548890039055600182528483203384528252918490208054879003905583518681529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35060019392505050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b3360009081526020819052604081205482111561054357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f45524332305f494e53554646494349454e545f42414c414e4345000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205482810110156105d957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f55494e543235365f4f564552464c4f5700000000000000000000000000000000604482015290519081900360640190fd5b336000818152602081815260408083208054879003905573ffffffffffffffffffffffffffffffffffffffff871680845292819020805487019055805186815290519293927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff91821660009081526001602090815260408083209390941682529190915220549056fea265627a7a723158205713efa92f66e67a8d01b80af8500df66bd6e9862dcf791e587181109d8ab0c464736f6c634300050b0032" + "object": "0x608060405234801561001057600080fd5b506106bf806100206000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c806370a082311161005057806370a0823114610121578063a9059cbb14610154578063dd62ed3e1461018d57610072565b8063095ea7b31461007757806318160ddd146100c457806323b872dd146100de575b600080fd5b6100b06004803603604081101561008d57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356101c8565b604080519115158252519081900360200190f35b6100cc61023b565b60408051918252519081900360200190f35b6100b0600480360360608110156100f457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610241565b6100cc6004803603602081101561013757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661049d565b6100b06004803603604081101561016a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356104c5565b6100cc600480360360408110156101a357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610652565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b60025490565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120548211156102d557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f45524332305f494e53554646494349454e545f42414c414e4345000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482111561037457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f45524332305f494e53554646494349454e545f414c4c4f57414e434500000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054828101101561040a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f55494e543235365f4f564552464c4f5700000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff80841660008181526020818152604080832080548801905593881680835284832080548890039055600182528483203384528252918490208054879003905583518681529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35060019392505050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b3360009081526020819052604081205482111561054357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f45524332305f494e53554646494349454e545f42414c414e4345000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205482810110156105d957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f55494e543235365f4f564552464c4f5700000000000000000000000000000000604482015290519081900360640190fd5b336000818152602081815260408083208054879003905573ffffffffffffffffffffffffffffffffffffffff871680845292819020805487019055805186815290519293927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff91821660009081526001602090815260408083209390941682529190915220549056fea265627a7a723158202ec4258d9cc44c3c6b86d5f8b40d57549ae0a8d26d000de443ed7eb3f5fd6cf064736f6c63430005100032" }, "deployedBytecode": { - "object": "0x608060405234801561001057600080fd5b50600436106100725760003560e01c806370a082311161005057806370a0823114610121578063a9059cbb14610154578063dd62ed3e1461018d57610072565b8063095ea7b31461007757806318160ddd146100c457806323b872dd146100de575b600080fd5b6100b06004803603604081101561008d57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356101c8565b604080519115158252519081900360200190f35b6100cc61023b565b60408051918252519081900360200190f35b6100b0600480360360608110156100f457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610241565b6100cc6004803603602081101561013757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661049d565b6100b06004803603604081101561016a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356104c5565b6100cc600480360360408110156101a357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610652565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b60025490565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120548211156102d557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f45524332305f494e53554646494349454e545f42414c414e4345000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482111561037457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f45524332305f494e53554646494349454e545f414c4c4f57414e434500000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054828101101561040a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f55494e543235365f4f564552464c4f5700000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff80841660008181526020818152604080832080548801905593881680835284832080548890039055600182528483203384528252918490208054879003905583518681529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35060019392505050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b3360009081526020819052604081205482111561054357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f45524332305f494e53554646494349454e545f42414c414e4345000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205482810110156105d957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f55494e543235365f4f564552464c4f5700000000000000000000000000000000604482015290519081900360640190fd5b336000818152602081815260408083208054879003905573ffffffffffffffffffffffffffffffffffffffff871680845292819020805487019055805186815290519293927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff91821660009081526001602090815260408083209390941682529190915220549056fea265627a7a723158205713efa92f66e67a8d01b80af8500df66bd6e9862dcf791e587181109d8ab0c464736f6c634300050b0032" + "object": "0x608060405234801561001057600080fd5b50600436106100725760003560e01c806370a082311161005057806370a0823114610121578063a9059cbb14610154578063dd62ed3e1461018d57610072565b8063095ea7b31461007757806318160ddd146100c457806323b872dd146100de575b600080fd5b6100b06004803603604081101561008d57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356101c8565b604080519115158252519081900360200190f35b6100cc61023b565b60408051918252519081900360200190f35b6100b0600480360360608110156100f457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610241565b6100cc6004803603602081101561013757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661049d565b6100b06004803603604081101561016a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356104c5565b6100cc600480360360408110156101a357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610652565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b60025490565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120548211156102d557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f45524332305f494e53554646494349454e545f42414c414e4345000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482111561037457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f45524332305f494e53554646494349454e545f414c4c4f57414e434500000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054828101101561040a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f55494e543235365f4f564552464c4f5700000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff80841660008181526020818152604080832080548801905593881680835284832080548890039055600182528483203384528252918490208054879003905583518681529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35060019392505050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b3360009081526020819052604081205482111561054357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f45524332305f494e53554646494349454e545f42414c414e4345000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205482810110156105d957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f55494e543235365f4f564552464c4f5700000000000000000000000000000000604482015290519081900360640190fd5b336000818152602081815260408083208054879003905573ffffffffffffffffffffffffffffffffffffffff871680845292819020805487019055805186815290519293927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff91821660009081526001602090815260408083209390941682529190915220549056fea265627a7a723158202ec4258d9cc44c3c6b86d5f8b40d57549ae0a8d26d000de443ed7eb3f5fd6cf064736f6c63430005100032" } } }, "compiler": { "name": "solc", - "version": "soljson-v0.5.11+commit.c082d0b4.js", + "version": "soljson-v0.5.16+commit.9c3226ce.js", "settings": { "optimizer": { "enabled": true, @@ -164,8 +164,8 @@ ] } }, - "evmVersion": "constantinople" + "evmVersion": "istanbul" } }, - "networks": {} + "chains": {} } diff --git a/packages/contract-artifacts/artifacts/ERC721Proxy.json b/packages/contract-artifacts/artifacts/ERC721Proxy.json index ef539ba123..d5bd3a2a53 100644 --- a/packages/contract-artifacts/artifacts/ERC721Proxy.json +++ b/packages/contract-artifacts/artifacts/ERC721Proxy.json @@ -3,6 +3,34 @@ "contractName": "ERC721Proxy", "compilerOutput": { "abi": [ + { + "anonymous": false, + "inputs": [ + { "indexed": true, "internalType": "address", "name": "target", "type": "address" }, + { "indexed": true, "internalType": "address", "name": "caller", "type": "address" } + ], + "name": "AuthorizedAddressAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "internalType": "address", "name": "target", "type": "address" }, + { "indexed": true, "internalType": "address", "name": "caller", "type": "address" } + ], + "name": "AuthorizedAddressRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, + { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { "payable": false, "stateMutability": "nonpayable", "type": "fallback" }, { "constant": false, "inputs": [{ "internalType": "address", "name": "target", "type": "address" }], @@ -21,45 +49,6 @@ "stateMutability": "view", "type": "function" }, - { - "constant": false, - "inputs": [{ "internalType": "address", "name": "target", "type": "address" }], - "name": "removeAuthorizedAddress", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "owner", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { "internalType": "address", "name": "target", "type": "address" }, - { "internalType": "uint256", "name": "index", "type": "uint256" } - ], - "name": "removeAuthorizedAddressAtIndex", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getProxyId", - "outputs": [{ "internalType": "bytes4", "name": "", "type": "bytes4" }], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, { "constant": true, "inputs": [{ "internalType": "address", "name": "", "type": "address" }], @@ -78,6 +67,45 @@ "stateMutability": "view", "type": "function" }, + { + "constant": true, + "inputs": [], + "name": "getProxyId", + "outputs": [{ "internalType": "bytes4", "name": "", "type": "bytes4" }], + "payable": false, + "stateMutability": "pure", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "owner", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [{ "internalType": "address", "name": "target", "type": "address" }], + "name": "removeAuthorizedAddress", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { "internalType": "address", "name": "target", "type": "address" }, + { "internalType": "uint256", "name": "index", "type": "uint256" } + ], + "name": "removeAuthorizedAddressAtIndex", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, { "constant": false, "inputs": [{ "internalType": "address", "name": "newOwner", "type": "address" }], @@ -86,25 +114,6 @@ "payable": false, "stateMutability": "nonpayable", "type": "function" - }, - { "payable": false, "stateMutability": "nonpayable", "type": "fallback" }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "target", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "caller", "type": "address" } - ], - "name": "AuthorizedAddressAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "target", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "caller", "type": "address" } - ], - "name": "AuthorizedAddressRemoved", - "type": "event" } ], "devdoc": { @@ -136,16 +145,16 @@ }, "evm": { "bytecode": { - "object": "0x6080604052600080546001600160a01b03191633179055610fb8806100256000396000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c80639ad2674411610076578063b91816111161005b578063b9181611146103ea578063d39de6e914610431578063f2fde38b14610489576100a3565b80639ad2674414610374578063ae25532e146103ad576100a3565b806342f1181e146102be578063494503d4146102f357806370712939146103395780638da5cb5b1461036c575b7fffffffff00000000000000000000000000000000000000000000000000000000600035167fa85e59e4000000000000000000000000000000000000000000000000000000008114156102b857604080513381526001602082015290812054610177577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c1553454e4445525f4e4f545f415554484f52495a454400000000000000604052600060605260646000fd5b50600160643503156101f4577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c0e494e56414c49445f414d4f554e540000000000000000000000000000604052600060605260646000fd5b7f23b872dd000000000000000000000000000000000000000000000000000000006000526040602460043760043560206048820160443760288101356000806064600080855af1915050801561024657005b507f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c0f5452414e534645525f4641494c454400000000000000000000000000604052600060605260646000fd5b50600080fd5b6102f1600480360360208110156102d457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166104bc565b005b6103106004803603602081101561030957600080fd5b50356106a8565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6102f16004803603602081101561034f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166106dc565b6103106109cf565b6102f16004803603604081101561038a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356109eb565b6103b5610d9c565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b61041d6004803603602081101561040057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610dd2565b604080519115158252519081900360200190f35b610439610de7565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561047557818101518382015260200161045d565b505050509050019250505060405180910390f35b6102f16004803603602081101561049f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610e56565b60005473ffffffffffffffffffffffffffffffffffffffff16331461054257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff16156105d757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5441524745545f414c52454144595f415554484f52495a454400000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b600281815481106106b557fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b60005473ffffffffffffffffffffffffffffffffffffffff16331461076257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff166107f657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116600090815260016020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b600254811015610988578173ffffffffffffffffffffffffffffffffffffffff166002828154811061087057fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561098057600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081106108c857fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff90921691839081106108fb57fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019061097a9082610f3c565b50610988565b600101610842565b50604051339073ffffffffffffffffffffffffffffffffffffffff8316907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a350565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a7157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff16610b0557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b6002548110610b7557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f494e4445585f4f55545f4f465f424f554e445300000000000000000000000000604482015290519081900360640190fd5b8173ffffffffffffffffffffffffffffffffffffffff1660028281548110610b9957fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614610c2757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f415554484f52495a45445f414444524553535f4d49534d415443480000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110610ca257fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff9092169183908110610cd557fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190610d549082610f3c565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b604080517f455243373231546f6b656e28616464726573732c75696e7432353629000000008152905190819003601c0190205b90565b60016020526000908152604090205460ff1681565b60606002805480602002602001604051908101604052809291908181526020018280548015610e4c57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610e21575b5050505050905090565b60005473ffffffffffffffffffffffffffffffffffffffff163314610edc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811615610f3957600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b815481835581811115610f6057600083815260209020610f60918101908301610f65565b505050565b610dcf91905b80821115610f7f5760008155600101610f6b565b509056fea265627a7a723158201e53a891f6df3931041b820f71387e9eecd97f7ea0d346c54fab37668bd022ec64736f6c634300050b0032" + "object": "0x6080604052600080546001600160a01b03191633179055610fb8806100256000396000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c80639ad2674411610076578063b91816111161005b578063b9181611146103ea578063d39de6e914610431578063f2fde38b14610489576100a3565b80639ad2674414610374578063ae25532e146103ad576100a3565b806342f1181e146102be578063494503d4146102f357806370712939146103395780638da5cb5b1461036c575b7fffffffff00000000000000000000000000000000000000000000000000000000600035167fa85e59e4000000000000000000000000000000000000000000000000000000008114156102b857604080513381526001602082015290812054610177577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c1553454e4445525f4e4f545f415554484f52495a454400000000000000604052600060605260646000fd5b50600160643503156101f4577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c0e494e56414c49445f414d4f554e540000000000000000000000000000604052600060605260646000fd5b7f23b872dd000000000000000000000000000000000000000000000000000000006000526040602460043760043560206048820160443760288101356000806064600080855af1915050801561024657005b507f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c0f5452414e534645525f4641494c454400000000000000000000000000604052600060605260646000fd5b50600080fd5b6102f1600480360360208110156102d457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166104bc565b005b6103106004803603602081101561030957600080fd5b50356106a8565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6102f16004803603602081101561034f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166106dc565b6103106109cf565b6102f16004803603604081101561038a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356109eb565b6103b5610d9c565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b61041d6004803603602081101561040057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610dd2565b604080519115158252519081900360200190f35b610439610de7565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561047557818101518382015260200161045d565b505050509050019250505060405180910390f35b6102f16004803603602081101561049f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610e56565b60005473ffffffffffffffffffffffffffffffffffffffff16331461054257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff16156105d757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5441524745545f414c52454144595f415554484f52495a454400000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b600281815481106106b557fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b60005473ffffffffffffffffffffffffffffffffffffffff16331461076257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff166107f657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116600090815260016020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b600254811015610988578173ffffffffffffffffffffffffffffffffffffffff166002828154811061087057fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561098057600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081106108c857fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff90921691839081106108fb57fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019061097a9082610f3c565b50610988565b600101610842565b50604051339073ffffffffffffffffffffffffffffffffffffffff8316907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a350565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a7157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff16610b0557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b6002548110610b7557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f494e4445585f4f55545f4f465f424f554e445300000000000000000000000000604482015290519081900360640190fd5b8173ffffffffffffffffffffffffffffffffffffffff1660028281548110610b9957fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614610c2757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f415554484f52495a45445f414444524553535f4d49534d415443480000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110610ca257fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff9092169183908110610cd557fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190610d549082610f3c565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b604080517f455243373231546f6b656e28616464726573732c75696e7432353629000000008152905190819003601c0190205b90565b60016020526000908152604090205460ff1681565b60606002805480602002602001604051908101604052809291908181526020018280548015610e4c57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610e21575b5050505050905090565b60005473ffffffffffffffffffffffffffffffffffffffff163314610edc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811615610f3957600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b815481835581811115610f6057600083815260209020610f60918101908301610f65565b505050565b610dcf91905b80821115610f7f5760008155600101610f6b565b509056fea265627a7a723158207063225c1cfe96aa06390b4076204071575e7a6d33956ad3b4d0dd2cffdd4be864736f6c63430005100032" }, "deployedBytecode": { - "object": "0x608060405234801561001057600080fd5b50600436106100a35760003560e01c80639ad2674411610076578063b91816111161005b578063b9181611146103ea578063d39de6e914610431578063f2fde38b14610489576100a3565b80639ad2674414610374578063ae25532e146103ad576100a3565b806342f1181e146102be578063494503d4146102f357806370712939146103395780638da5cb5b1461036c575b7fffffffff00000000000000000000000000000000000000000000000000000000600035167fa85e59e4000000000000000000000000000000000000000000000000000000008114156102b857604080513381526001602082015290812054610177577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c1553454e4445525f4e4f545f415554484f52495a454400000000000000604052600060605260646000fd5b50600160643503156101f4577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c0e494e56414c49445f414d4f554e540000000000000000000000000000604052600060605260646000fd5b7f23b872dd000000000000000000000000000000000000000000000000000000006000526040602460043760043560206048820160443760288101356000806064600080855af1915050801561024657005b507f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c0f5452414e534645525f4641494c454400000000000000000000000000604052600060605260646000fd5b50600080fd5b6102f1600480360360208110156102d457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166104bc565b005b6103106004803603602081101561030957600080fd5b50356106a8565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6102f16004803603602081101561034f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166106dc565b6103106109cf565b6102f16004803603604081101561038a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356109eb565b6103b5610d9c565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b61041d6004803603602081101561040057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610dd2565b604080519115158252519081900360200190f35b610439610de7565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561047557818101518382015260200161045d565b505050509050019250505060405180910390f35b6102f16004803603602081101561049f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610e56565b60005473ffffffffffffffffffffffffffffffffffffffff16331461054257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff16156105d757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5441524745545f414c52454144595f415554484f52495a454400000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b600281815481106106b557fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b60005473ffffffffffffffffffffffffffffffffffffffff16331461076257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff166107f657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116600090815260016020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b600254811015610988578173ffffffffffffffffffffffffffffffffffffffff166002828154811061087057fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561098057600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081106108c857fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff90921691839081106108fb57fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019061097a9082610f3c565b50610988565b600101610842565b50604051339073ffffffffffffffffffffffffffffffffffffffff8316907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a350565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a7157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff16610b0557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b6002548110610b7557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f494e4445585f4f55545f4f465f424f554e445300000000000000000000000000604482015290519081900360640190fd5b8173ffffffffffffffffffffffffffffffffffffffff1660028281548110610b9957fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614610c2757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f415554484f52495a45445f414444524553535f4d49534d415443480000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110610ca257fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff9092169183908110610cd557fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190610d549082610f3c565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b604080517f455243373231546f6b656e28616464726573732c75696e7432353629000000008152905190819003601c0190205b90565b60016020526000908152604090205460ff1681565b60606002805480602002602001604051908101604052809291908181526020018280548015610e4c57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610e21575b5050505050905090565b60005473ffffffffffffffffffffffffffffffffffffffff163314610edc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811615610f3957600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b815481835581811115610f6057600083815260209020610f60918101908301610f65565b505050565b610dcf91905b80821115610f7f5760008155600101610f6b565b509056fea265627a7a723158201e53a891f6df3931041b820f71387e9eecd97f7ea0d346c54fab37668bd022ec64736f6c634300050b0032" + "object": "0x608060405234801561001057600080fd5b50600436106100a35760003560e01c80639ad2674411610076578063b91816111161005b578063b9181611146103ea578063d39de6e914610431578063f2fde38b14610489576100a3565b80639ad2674414610374578063ae25532e146103ad576100a3565b806342f1181e146102be578063494503d4146102f357806370712939146103395780638da5cb5b1461036c575b7fffffffff00000000000000000000000000000000000000000000000000000000600035167fa85e59e4000000000000000000000000000000000000000000000000000000008114156102b857604080513381526001602082015290812054610177577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c1553454e4445525f4e4f545f415554484f52495a454400000000000000604052600060605260646000fd5b50600160643503156101f4577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c0e494e56414c49445f414d4f554e540000000000000000000000000000604052600060605260646000fd5b7f23b872dd000000000000000000000000000000000000000000000000000000006000526040602460043760043560206048820160443760288101356000806064600080855af1915050801561024657005b507f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c0f5452414e534645525f4641494c454400000000000000000000000000604052600060605260646000fd5b50600080fd5b6102f1600480360360208110156102d457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166104bc565b005b6103106004803603602081101561030957600080fd5b50356106a8565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6102f16004803603602081101561034f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166106dc565b6103106109cf565b6102f16004803603604081101561038a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356109eb565b6103b5610d9c565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b61041d6004803603602081101561040057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610dd2565b604080519115158252519081900360200190f35b610439610de7565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561047557818101518382015260200161045d565b505050509050019250505060405180910390f35b6102f16004803603602081101561049f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610e56565b60005473ffffffffffffffffffffffffffffffffffffffff16331461054257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff16156105d757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5441524745545f414c52454144595f415554484f52495a454400000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b600281815481106106b557fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b60005473ffffffffffffffffffffffffffffffffffffffff16331461076257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff166107f657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116600090815260016020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b600254811015610988578173ffffffffffffffffffffffffffffffffffffffff166002828154811061087057fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561098057600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081106108c857fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff90921691839081106108fb57fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019061097a9082610f3c565b50610988565b600101610842565b50604051339073ffffffffffffffffffffffffffffffffffffffff8316907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a350565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a7157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff16610b0557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b6002548110610b7557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f494e4445585f4f55545f4f465f424f554e445300000000000000000000000000604482015290519081900360640190fd5b8173ffffffffffffffffffffffffffffffffffffffff1660028281548110610b9957fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614610c2757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f415554484f52495a45445f414444524553535f4d49534d415443480000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110610ca257fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff9092169183908110610cd557fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190610d549082610f3c565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b604080517f455243373231546f6b656e28616464726573732c75696e7432353629000000008152905190819003601c0190205b90565b60016020526000908152604090205460ff1681565b60606002805480602002602001604051908101604052809291908181526020018280548015610e4c57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610e21575b5050505050905090565b60005473ffffffffffffffffffffffffffffffffffffffff163314610edc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811615610f3957600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b815481835581811115610f6057600083815260209020610f60918101908301610f65565b505050565b610dcf91905b80821115610f7f5760008155600101610f6b565b509056fea265627a7a723158207063225c1cfe96aa06390b4076204071575e7a6d33956ad3b4d0dd2cffdd4be864736f6c63430005100032" } } }, "compiler": { "name": "solc", - "version": "soljson-v0.5.11+commit.c082d0b4.js", + "version": "soljson-v0.5.16+commit.9c3226ce.js", "settings": { "optimizer": { "enabled": true, @@ -164,8 +173,8 @@ ] } }, - "evmVersion": "constantinople" + "evmVersion": "istanbul" } }, - "networks": {} + "chains": {} } diff --git a/packages/contract-artifacts/artifacts/ERC721Token.json b/packages/contract-artifacts/artifacts/ERC721Token.json index e93ee445d8..e17e12faca 100644 --- a/packages/contract-artifacts/artifacts/ERC721Token.json +++ b/packages/contract-artifacts/artifacts/ERC721Token.json @@ -201,16 +201,16 @@ }, "evm": { "bytecode": { - "object": "0x608060405234801561001057600080fd5b50610ebe806100206000396000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c80636352211e11610076578063a22cb4651161005b578063a22cb46514610211578063b88d4fde1461024c578063e985e9c5146102e9576100a3565b80636352211e146101af57806370a08231146101cc576100a3565b8063081812fc146100a8578063095ea7b3146100ee57806323b872dd1461012957806342842e0e1461016c575b600080fd5b6100c5600480360360208110156100be57600080fd5b5035610338565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101276004803603604081101561010457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610360565b005b6101276004803603606081101561013f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610482565b6101276004803603606081101561018257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356107ef565b6100c5600480360360208110156101c557600080fd5b5035610989565b6101ff600480360360208110156101e257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610a20565b60408051918252519081900360200190f35b6101276004803603604081101561022757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001351515610acd565b6101276004803603608081101561026257600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235811692602081013590911691604082013591908101906080810160608201356401000000008111156102aa57600080fd5b8201836020820111156102bc57600080fd5b803590602001918460018302840111640100000000831117156102de57600080fd5b509092509050610b66565b610324600480360360408110156102ff57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610d31565b604080519115158252519081900360200190f35b60009081526001602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b600061036b82610989565b90503373ffffffffffffffffffffffffffffffffffffffff8216148061039657506103968133610d31565b61040157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4552433732315f494e56414c49445f53454e4445520000000000000000000000604482015290519081900360640190fd5b60008281526001602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b73ffffffffffffffffffffffffffffffffffffffff821661050457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4552433732315f5a45524f5f544f5f4144445245535300000000000000000000604482015290519081900360640190fd5b600061050f82610989565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146105ab57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4552433732315f4f574e45525f4d49534d415443480000000000000000000000604482015290519081900360640190fd5b3360006105b784610338565b90508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614806105f857506105f88383610d31565b8061062e57508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b61069957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4552433732315f494e56414c49445f5350454e44455200000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116156106ea57600084815260016020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555b60008481526020818152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a811691909117909155891683526002909152902054610753906001610d6c565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260205260408082209390935590871681522054610790906001610d90565b73ffffffffffffffffffffffffffffffffffffffff808716600081815260026020526040808220949094559251879391928a16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050505050565b6107fa838383610482565b813b801561098357604080517f150b7a0200000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff8681166024830152604482018590526080606483015260006084830181905292519086169163150b7a029160c480830192602092919082900301818787803b15801561088f57600080fd5b505af11580156108a3573d6000803e3d6000fd5b505050506040513d60208110156108b957600080fd5b505160405190915080602f610e5b8239602f01905060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461098157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4552433732315f494e56414c49445f53454c4543544f52000000000000000000604482015290519081900360640190fd5b505b50505050565b60008181526020819052604081205473ffffffffffffffffffffffffffffffffffffffff1680610a1a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4552433732315f5a45524f5f4f574e4552000000000000000000000000000000604482015290519081900360640190fd5b92915050565b600073ffffffffffffffffffffffffffffffffffffffff8216610aa457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4552433732315f5a45524f5f4f574e4552000000000000000000000000000000604482015290519081900360640190fd5b5073ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205490565b33600081815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b610b71858585610482565b833b8015610d29576040517f150b7a02000000000000000000000000000000000000000000000000000000008152336004820181815273ffffffffffffffffffffffffffffffffffffffff89811660248501526044840188905260806064850190815260848501879052600094918a169363150b7a029390928c928b928b928b929060a401848480828437600081840152601f19601f8201169050808301925050509650505050505050602060405180830381600087803b158015610c3557600080fd5b505af1158015610c49573d6000803e3d6000fd5b505050506040513d6020811015610c5f57600080fd5b505160405190915080602f610e5b8239602f01905060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610d2757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4552433732315f494e56414c49445f53454c4543544f52000000000000000000604482015290519081900360640190fd5b505b505050505050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260036020908152604080832093909416825291909152205460ff1690565b600082821115610d8a57610d8a610d8560028585610db3565b610e52565b50900390565b600082820183811015610dac57610dac610d8560008686610db3565b9392505050565b606063e946c1bb60e01b84848460405160240180846003811115610dd357fe5b60ff1681526020018381526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090509392505050565b805160208201fdfe6f6e455243373231526563656976656428616464726573732c616464726573732c75696e743235362c627974657329a265627a7a723158204bc74831490bca4fbe1805808d58d6b0e12f618a37565e744e91d8dc73dc18b164736f6c634300050c0032" + "object": "0x608060405234801561001057600080fd5b50610ec4806100206000396000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c80636352211e11610076578063a22cb4651161005b578063a22cb46514610211578063b88d4fde1461024c578063e985e9c5146102e9576100a3565b80636352211e146101af57806370a08231146101cc576100a3565b8063081812fc146100a8578063095ea7b3146100ee57806323b872dd1461012957806342842e0e1461016c575b600080fd5b6100c5600480360360208110156100be57600080fd5b5035610338565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101276004803603604081101561010457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610360565b005b6101276004803603606081101561013f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610482565b6101276004803603606081101561018257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356107f5565b6100c5600480360360208110156101c557600080fd5b503561098f565b6101ff600480360360208110156101e257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610a26565b60408051918252519081900360200190f35b6101276004803603604081101561022757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001351515610ad3565b6101276004803603608081101561026257600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235811692602081013590911691604082013591908101906080810160608201356401000000008111156102aa57600080fd5b8201836020820111156102bc57600080fd5b803590602001918460018302840111640100000000831117156102de57600080fd5b509092509050610b6c565b610324600480360360408110156102ff57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610d37565b604080519115158252519081900360200190f35b60009081526001602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b600061036b8261098f565b90503373ffffffffffffffffffffffffffffffffffffffff8216148061039657506103968133610d37565b61040157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4552433732315f494e56414c49445f53454e4445520000000000000000000000604482015290519081900360640190fd5b60008281526001602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b73ffffffffffffffffffffffffffffffffffffffff821661050457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4552433732315f5a45524f5f544f5f4144445245535300000000000000000000604482015290519081900360640190fd5b600061050f8261098f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146105ab57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4552433732315f4f574e45525f4d49534d415443480000000000000000000000604482015290519081900360640190fd5b3360006105b784610338565b90508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614806105f857506105f88383610d37565b8061062e57508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b61069957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4552433732315f494e56414c49445f5350454e44455200000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116156106ea57600084815260016020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555b60008481526020818152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a811691909117909155891683526002909152902054610753906001610d72565b73ffffffffffffffffffffffffffffffffffffffff808816600090815260026020526040808220939093559087168152205461079690600163ffffffff610d9616565b73ffffffffffffffffffffffffffffffffffffffff808716600081815260026020526040808220949094559251879391928a16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050505050565b610800838383610482565b813b801561098957604080517f150b7a0200000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff8681166024830152604482018590526080606483015260006084830181905292519086169163150b7a029160c480830192602092919082900301818787803b15801561089557600080fd5b505af11580156108a9573d6000803e3d6000fd5b505050506040513d60208110156108bf57600080fd5b505160405190915080602f610e618239602f01905060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461098757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4552433732315f494e56414c49445f53454c4543544f52000000000000000000604482015290519081900360640190fd5b505b50505050565b60008181526020819052604081205473ffffffffffffffffffffffffffffffffffffffff1680610a2057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4552433732315f5a45524f5f4f574e4552000000000000000000000000000000604482015290519081900360640190fd5b92915050565b600073ffffffffffffffffffffffffffffffffffffffff8216610aaa57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4552433732315f5a45524f5f4f574e4552000000000000000000000000000000604482015290519081900360640190fd5b5073ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205490565b33600081815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b610b77858585610482565b833b8015610d2f576040517f150b7a02000000000000000000000000000000000000000000000000000000008152336004820181815273ffffffffffffffffffffffffffffffffffffffff89811660248501526044840188905260806064850190815260848501879052600094918a169363150b7a029390928c928b928b928b929060a401848480828437600081840152601f19601f8201169050808301925050509650505050505050602060405180830381600087803b158015610c3b57600080fd5b505af1158015610c4f573d6000803e3d6000fd5b505050506040513d6020811015610c6557600080fd5b505160405190915080602f610e618239602f01905060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610d2d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4552433732315f494e56414c49445f53454c4543544f52000000000000000000604482015290519081900360640190fd5b505b505050505050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260036020908152604080832093909416825291909152205460ff1690565b600082821115610d9057610d90610d8b60028585610db9565b610e58565b50900390565b600082820183811015610db257610db2610d8b60008686610db9565b9392505050565b606063e946c1bb60e01b84848460405160240180846003811115610dd957fe5b60ff1681526020018381526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090509392505050565b805160208201fdfe6f6e455243373231526563656976656428616464726573732c616464726573732c75696e743235362c627974657329a265627a7a7231582089d21f5e9829efe55d287f8326465b302d41c66fe1527985ca8d29a21f1932b364736f6c63430005100032" }, "deployedBytecode": { - "object": "0x608060405234801561001057600080fd5b50600436106100a35760003560e01c80636352211e11610076578063a22cb4651161005b578063a22cb46514610211578063b88d4fde1461024c578063e985e9c5146102e9576100a3565b80636352211e146101af57806370a08231146101cc576100a3565b8063081812fc146100a8578063095ea7b3146100ee57806323b872dd1461012957806342842e0e1461016c575b600080fd5b6100c5600480360360208110156100be57600080fd5b5035610338565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101276004803603604081101561010457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610360565b005b6101276004803603606081101561013f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610482565b6101276004803603606081101561018257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356107ef565b6100c5600480360360208110156101c557600080fd5b5035610989565b6101ff600480360360208110156101e257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610a20565b60408051918252519081900360200190f35b6101276004803603604081101561022757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001351515610acd565b6101276004803603608081101561026257600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235811692602081013590911691604082013591908101906080810160608201356401000000008111156102aa57600080fd5b8201836020820111156102bc57600080fd5b803590602001918460018302840111640100000000831117156102de57600080fd5b509092509050610b66565b610324600480360360408110156102ff57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610d31565b604080519115158252519081900360200190f35b60009081526001602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b600061036b82610989565b90503373ffffffffffffffffffffffffffffffffffffffff8216148061039657506103968133610d31565b61040157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4552433732315f494e56414c49445f53454e4445520000000000000000000000604482015290519081900360640190fd5b60008281526001602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b73ffffffffffffffffffffffffffffffffffffffff821661050457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4552433732315f5a45524f5f544f5f4144445245535300000000000000000000604482015290519081900360640190fd5b600061050f82610989565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146105ab57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4552433732315f4f574e45525f4d49534d415443480000000000000000000000604482015290519081900360640190fd5b3360006105b784610338565b90508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614806105f857506105f88383610d31565b8061062e57508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b61069957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4552433732315f494e56414c49445f5350454e44455200000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116156106ea57600084815260016020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555b60008481526020818152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a811691909117909155891683526002909152902054610753906001610d6c565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260205260408082209390935590871681522054610790906001610d90565b73ffffffffffffffffffffffffffffffffffffffff808716600081815260026020526040808220949094559251879391928a16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050505050565b6107fa838383610482565b813b801561098357604080517f150b7a0200000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff8681166024830152604482018590526080606483015260006084830181905292519086169163150b7a029160c480830192602092919082900301818787803b15801561088f57600080fd5b505af11580156108a3573d6000803e3d6000fd5b505050506040513d60208110156108b957600080fd5b505160405190915080602f610e5b8239602f01905060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461098157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4552433732315f494e56414c49445f53454c4543544f52000000000000000000604482015290519081900360640190fd5b505b50505050565b60008181526020819052604081205473ffffffffffffffffffffffffffffffffffffffff1680610a1a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4552433732315f5a45524f5f4f574e4552000000000000000000000000000000604482015290519081900360640190fd5b92915050565b600073ffffffffffffffffffffffffffffffffffffffff8216610aa457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4552433732315f5a45524f5f4f574e4552000000000000000000000000000000604482015290519081900360640190fd5b5073ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205490565b33600081815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b610b71858585610482565b833b8015610d29576040517f150b7a02000000000000000000000000000000000000000000000000000000008152336004820181815273ffffffffffffffffffffffffffffffffffffffff89811660248501526044840188905260806064850190815260848501879052600094918a169363150b7a029390928c928b928b928b929060a401848480828437600081840152601f19601f8201169050808301925050509650505050505050602060405180830381600087803b158015610c3557600080fd5b505af1158015610c49573d6000803e3d6000fd5b505050506040513d6020811015610c5f57600080fd5b505160405190915080602f610e5b8239602f01905060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610d2757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4552433732315f494e56414c49445f53454c4543544f52000000000000000000604482015290519081900360640190fd5b505b505050505050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260036020908152604080832093909416825291909152205460ff1690565b600082821115610d8a57610d8a610d8560028585610db3565b610e52565b50900390565b600082820183811015610dac57610dac610d8560008686610db3565b9392505050565b606063e946c1bb60e01b84848460405160240180846003811115610dd357fe5b60ff1681526020018381526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090509392505050565b805160208201fdfe6f6e455243373231526563656976656428616464726573732c616464726573732c75696e743235362c627974657329a265627a7a723158204bc74831490bca4fbe1805808d58d6b0e12f618a37565e744e91d8dc73dc18b164736f6c634300050c0032" + "object": "0x608060405234801561001057600080fd5b50600436106100a35760003560e01c80636352211e11610076578063a22cb4651161005b578063a22cb46514610211578063b88d4fde1461024c578063e985e9c5146102e9576100a3565b80636352211e146101af57806370a08231146101cc576100a3565b8063081812fc146100a8578063095ea7b3146100ee57806323b872dd1461012957806342842e0e1461016c575b600080fd5b6100c5600480360360208110156100be57600080fd5b5035610338565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101276004803603604081101561010457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610360565b005b6101276004803603606081101561013f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610482565b6101276004803603606081101561018257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356107f5565b6100c5600480360360208110156101c557600080fd5b503561098f565b6101ff600480360360208110156101e257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610a26565b60408051918252519081900360200190f35b6101276004803603604081101561022757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001351515610ad3565b6101276004803603608081101561026257600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235811692602081013590911691604082013591908101906080810160608201356401000000008111156102aa57600080fd5b8201836020820111156102bc57600080fd5b803590602001918460018302840111640100000000831117156102de57600080fd5b509092509050610b6c565b610324600480360360408110156102ff57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610d37565b604080519115158252519081900360200190f35b60009081526001602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b600061036b8261098f565b90503373ffffffffffffffffffffffffffffffffffffffff8216148061039657506103968133610d37565b61040157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4552433732315f494e56414c49445f53454e4445520000000000000000000000604482015290519081900360640190fd5b60008281526001602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b73ffffffffffffffffffffffffffffffffffffffff821661050457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4552433732315f5a45524f5f544f5f4144445245535300000000000000000000604482015290519081900360640190fd5b600061050f8261098f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146105ab57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4552433732315f4f574e45525f4d49534d415443480000000000000000000000604482015290519081900360640190fd5b3360006105b784610338565b90508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614806105f857506105f88383610d37565b8061062e57508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b61069957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4552433732315f494e56414c49445f5350454e44455200000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116156106ea57600084815260016020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555b60008481526020818152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a811691909117909155891683526002909152902054610753906001610d72565b73ffffffffffffffffffffffffffffffffffffffff808816600090815260026020526040808220939093559087168152205461079690600163ffffffff610d9616565b73ffffffffffffffffffffffffffffffffffffffff808716600081815260026020526040808220949094559251879391928a16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050505050565b610800838383610482565b813b801561098957604080517f150b7a0200000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff8681166024830152604482018590526080606483015260006084830181905292519086169163150b7a029160c480830192602092919082900301818787803b15801561089557600080fd5b505af11580156108a9573d6000803e3d6000fd5b505050506040513d60208110156108bf57600080fd5b505160405190915080602f610e618239602f01905060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461098757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4552433732315f494e56414c49445f53454c4543544f52000000000000000000604482015290519081900360640190fd5b505b50505050565b60008181526020819052604081205473ffffffffffffffffffffffffffffffffffffffff1680610a2057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4552433732315f5a45524f5f4f574e4552000000000000000000000000000000604482015290519081900360640190fd5b92915050565b600073ffffffffffffffffffffffffffffffffffffffff8216610aaa57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4552433732315f5a45524f5f4f574e4552000000000000000000000000000000604482015290519081900360640190fd5b5073ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205490565b33600081815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b610b77858585610482565b833b8015610d2f576040517f150b7a02000000000000000000000000000000000000000000000000000000008152336004820181815273ffffffffffffffffffffffffffffffffffffffff89811660248501526044840188905260806064850190815260848501879052600094918a169363150b7a029390928c928b928b928b929060a401848480828437600081840152601f19601f8201169050808301925050509650505050505050602060405180830381600087803b158015610c3b57600080fd5b505af1158015610c4f573d6000803e3d6000fd5b505050506040513d6020811015610c6557600080fd5b505160405190915080602f610e618239602f01905060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610d2d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4552433732315f494e56414c49445f53454c4543544f52000000000000000000604482015290519081900360640190fd5b505b505050505050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260036020908152604080832093909416825291909152205460ff1690565b600082821115610d9057610d90610d8b60028585610db9565b610e58565b50900390565b600082820183811015610db257610db2610d8b60008686610db9565b9392505050565b606063e946c1bb60e01b84848460405160240180846003811115610dd957fe5b60ff1681526020018381526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090509392505050565b805160208201fdfe6f6e455243373231526563656976656428616464726573732c616464726573732c75696e743235362c627974657329a265627a7a7231582089d21f5e9829efe55d287f8326465b302d41c66fe1527985ca8d29a21f1932b364736f6c63430005100032" } } }, "compiler": { "name": "solc", - "version": "soljson-v0.5.12+commit.7709ece9.js", + "version": "soljson-v0.5.16+commit.9c3226ce.js", "settings": { "optimizer": { "enabled": true, @@ -229,8 +229,8 @@ ] } }, - "evmVersion": "constantinople" + "evmVersion": "istanbul" } }, - "networks": {} + "chains": {} } diff --git a/packages/contract-artifacts/artifacts/Exchange.json b/packages/contract-artifacts/artifacts/Exchange.json index 872ea30772..f176193936 100644 --- a/packages/contract-artifacts/artifacts/Exchange.json +++ b/packages/contract-artifacts/artifacts/Exchange.json @@ -72,6 +72,15 @@ "name": "Fill", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, + { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } + ], + "name": "OwnershipTransferred", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -207,7 +216,7 @@ { "internalType": "bytes[]", "name": "signatures", "type": "bytes[]" } ], "name": "batchExecuteTransactions", - "outputs": [{ "internalType": "bytes[]", "name": "", "type": "bytes[]" }], + "outputs": [{ "internalType": "bytes[]", "name": "returnData", "type": "bytes[]" }], "payable": true, "stateMutability": "payable", "type": "function" @@ -584,6 +593,15 @@ "stateMutability": "view", "type": "function" }, + { + "constant": false, + "inputs": [], + "name": "detachProtocolFeeCollector", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, { "constant": false, "inputs": [ @@ -712,7 +730,7 @@ "constant": true, "inputs": [{ "internalType": "bytes4", "name": "assetProxyId", "type": "bytes4" }], "name": "getAssetProxy", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "outputs": [{ "internalType": "address", "name": "assetProxy", "type": "address" }], "payable": false, "stateMutability": "view", "type": "function" @@ -746,7 +764,7 @@ "outputs": [ { "components": [ - { "internalType": "uint8", "name": "orderStatus", "type": "uint8" }, + { "internalType": "enum LibOrder.OrderStatus", "name": "orderStatus", "type": "uint8" }, { "internalType": "bytes32", "name": "orderHash", "type": "bytes32" }, { "internalType": "uint256", "name": "orderTakerAssetFilledAmount", "type": "uint256" } ], @@ -1320,6 +1338,7 @@ } ], "devdoc": { + "details": "The 0x Exchange contract.", "methods": { "batchCancelOrders((address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,bytes,bytes)[])": { "details": "Executes multiple calls of cancelOrder.", @@ -1331,7 +1350,7 @@ "signatures": "Array of proofs that transactions have been signed by signer(s).", "transactions": "Array of 0x transaction structures." }, - "return": "Array containing ABI encoded return data for each of the underlying Exchange function calls." + "return": "returnData Array containing ABI encoded return data for each of the underlying Exchange function calls." }, "batchFillOrKillOrders((address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,bytes,bytes)[],uint256[],bytes[])": { "details": "Executes multiple calls of fillOrKillOrder.", @@ -1340,7 +1359,7 @@ "signatures": "Proofs that orders have been created by makers.", "takerAssetFillAmounts": "Array of desired amounts of takerAsset to sell in orders." }, - "return": "Array of amounts filled and fees paid by makers and taker." + "return": "fillResults Array of amounts filled and fees paid by makers and taker." }, "batchFillOrders((address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,bytes,bytes)[],uint256[],bytes[])": { "details": "Executes multiple calls of fillOrder.", @@ -1349,7 +1368,7 @@ "signatures": "Proofs that orders have been created by makers.", "takerAssetFillAmounts": "Array of desired amounts of takerAsset to sell in orders." }, - "return": "Array of amounts filled and fees paid by makers and taker." + "return": "fillResults Array of amounts filled and fees paid by makers and taker." }, "batchFillOrdersNoThrow((address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,bytes,bytes)[],uint256[],bytes[])": { "details": "Executes multiple calls of fillOrder. If any fill reverts, the error is caught and ignored.", @@ -1358,7 +1377,7 @@ "signatures": "Proofs that orders have been created by makers.", "takerAssetFillAmounts": "Array of desired amounts of takerAsset to sell in orders." }, - "return": "Array of amounts filled and fees paid by makers and taker." + "return": "fillResults Array of amounts filled and fees paid by makers and taker." }, "batchMatchOrders((address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,bytes,bytes)[],(address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,bytes,bytes)[],bytes[],bytes[])": { "details": "Match complementary orders that have a profitable spread. Each order is filled at their respective price point, and the matcher receives a profit denominated in the left maker asset.", @@ -1394,6 +1413,9 @@ "details": "Mixins are instantiated in the order they are inherited", "params": { "chainId": "Chain ID of the network this contract is deployed on." } }, + "detachProtocolFeeCollector()": { + "details": "Sets the protocolFeeCollector contract address to 0. Only callable by owner." + }, "executeTransaction((uint256,uint256,uint256,address,bytes),bytes)": { "details": "Executes an Exchange method call in the context of signer.", "params": { @@ -1403,12 +1425,13 @@ "return": "ABI encoded return data of the underlying Exchange function call." }, "fillOrKillOrder((address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,bytes,bytes),uint256,bytes)": { - "details": "Fills the input order. Reverts if exact takerAssetFillAmount not filled.", + "details": "Fills the input order. Reverts if exact `takerAssetFillAmount` not filled.", "params": { "order": "Order struct containing order specifications.", "signature": "Proof that order has been created by maker.", "takerAssetFillAmount": "Desired amount of takerAsset to sell." - } + }, + "return": "fillResults Amounts filled and fees paid." }, "fillOrder((address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,bytes,bytes),uint256,bytes)": { "details": "Fills the input order.", @@ -1417,17 +1440,17 @@ "signature": "Proof that order has been created by maker.", "takerAssetFillAmount": "Desired amount of takerAsset to sell." }, - "return": "Amounts filled and fees paid by maker and taker." + "return": "fillResults Amounts filled and fees paid by maker and taker." }, "getAssetProxy(bytes4)": { "details": "Gets an asset proxy.", "params": { "assetProxyId": "Id of the asset proxy." }, - "return": "The asset proxy registered to assetProxyId. Returns 0x0 if no proxy is registered." + "return": "assetProxy The asset proxy address registered to assetProxyId. Returns 0x0 if no proxy is registered." }, "getOrderInfo((address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,bytes,bytes))": { "details": "Gets information about an order: status, hash, and amount filled.", "params": { "order": "Order to gather information on." }, - "return": "OrderInfo Information about the order and its state. See LibOrder.OrderInfo for a complete description." + "return": "orderInfo Information about the order and its state. See LibOrder.OrderInfo for a complete description." }, "isValidHashSignature(bytes32,address,bytes)": { "details": "Verifies that a hash has been signed by the given signer.", @@ -1458,7 +1481,7 @@ "orders": "Array of order specifications.", "signatures": "Proofs that orders have been signed by makers." }, - "return": "Amounts filled and fees paid by makers and taker." + "return": "fillResults Amounts filled and fees paid by makers and taker." }, "marketBuyOrdersNoThrow((address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,bytes,bytes)[],uint256,bytes[])": { "details": "Executes multiple calls of fillOrder until total amount of makerAsset is bought by taker. If any fill reverts, the error is caught and ignored. NOTE: This function does not enforce that the makerAsset is the same for each order.", @@ -1467,7 +1490,7 @@ "orders": "Array of order specifications.", "signatures": "Proofs that orders have been signed by makers." }, - "return": "Amounts filled and fees paid by makers and taker." + "return": "fillResults Amounts filled and fees paid by makers and taker." }, "marketSellOrdersFillOrKill((address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,bytes,bytes)[],uint256,bytes[])": { "details": "Calls marketSellOrdersNoThrow then reverts if < takerAssetFillAmount has been sold. NOTE: This function does not enforce that the takerAsset is the same for each order.", @@ -1476,7 +1499,7 @@ "signatures": "Proofs that orders have been signed by makers.", "takerAssetFillAmount": "Minimum amount of takerAsset to sell." }, - "return": "Amounts filled and fees paid by makers and taker." + "return": "fillResults Amounts filled and fees paid by makers and taker." }, "marketSellOrdersNoThrow((address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,bytes,bytes)[],uint256,bytes[])": { "details": "Executes multiple calls of fillOrder until total amount of takerAsset is sold by taker. If any fill reverts, the error is caught and ignored. NOTE: This function does not enforce that the takerAsset is the same for each order.", @@ -1485,7 +1508,7 @@ "signatures": "Proofs that orders have been signed by makers.", "takerAssetFillAmount": "Desired amount of takerAsset to sell." }, - "return": "Amounts filled and fees paid by makers and taker." + "return": "fillResults Amounts filled and fees paid by makers and taker." }, "matchOrders((address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,bytes,bytes),(address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,bytes,bytes),bytes,bytes)": { "details": "Match two complementary orders that have a profitable spread. Each order is filled at their respective price point. However, the calculations are carried out as though the orders are both being filled at the right order's price point. The profit made by the left order goes to the taker (who matched the two orders).", @@ -1539,21 +1562,25 @@ "toAddresses": "Array containing the `to` addresses that correspond with each transfer." }, "return": "This function does not return a value. However, it will always revert with `Error(\"TRANSFERS_SUCCESSFUL\")` if all of the transfers were successful." + }, + "transferOwnership(address)": { + "details": "Change the owner of this contract.", + "params": { "newOwner": "New owner address." } } } }, "evm": { "bytecode": { - "object": "0x60806040526000805460ff60a01b191690553480156200001e57600080fd5b5060405162005ddc38038062005ddc833981016040819052620000419162000141565b600080546001600160a01b03191633178155819080309050620000dc6040518060400160405280600b81526020017f30782050726f746f636f6c0000000000000000000000000000000000000000008152506040518060400160405280600581526020017f332e302e300000000000000000000000000000000000000000000000000000008152508584620000ea60201b62005bd81760201c565b600155506200015a92505050565b8351602094850120835193850193909320604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f815295860194909452928401929092526060830152608082015260a0902090565b60006020828403121562000153578081fd5b5051919050565b615c72806200016a6000396000f3fe6080604052600436106102d15760003560e01c80638da5cb5b11610179578063beee2e14116100d6578063dd885e2d1161008a578063eea086ba11610064578063eea086ba14610715578063f2fde38b1461072a578063fc74896d1461074a576102d1565b8063dd885e2d146106cd578063dedfc1f1146106ef578063e14b58c414610702576102d1565b8063c26cfecd116100bb578063c26cfecd14610678578063c585bb931461068d578063d9bfa73e146106ad576102d1565b8063beee2e1414610645578063c0fa16cc14610658576102d1565b80639d3fa4b91161012d578063a6c3bf3311610112578063a6c3bf33146105ff578063b04fbddd14610612578063b718e29214610632576102d1565b80639d3fa4b9146105b2578063a12dcc6f146105df576102d1565b80639331c7421161015e5780639331c7421461056c5780639694a4021461058c5780639b44d5561461059f576102d1565b80638da5cb5b146105375780638ea8dfe41461054c576102d1565b80636a1a80fd116102325780638171c407116101e657806388ec79fb116101c057806388ec79fb146104e45780638bc8efb3146105045780638d45cd2314610517576102d1565b80638171c4071461048f57806382c174d0146104af578063850a1501146104cf576102d1565b806377fcce681161021757806377fcce681461044957806378d29ac11461045c5780637b8e35141461046f576102d1565b80636a1a80fd146104165780636fcf3e9e14610436576102d1565b80632da629871161028957806346c02d7a1161026e57806346c02d7a146103c35780634f9559b1146103d657806360704108146103e9576102d1565b80632da629871461038e578063369da099146103a3576102d1565b80632280c910116102ba5780632280c9101461032e578063288cdc911461034e5780632ac126221461036e576102d1565b80630228e168146102d65780631ce4c78b1461030c575b600080fd5b3480156102e257600080fd5b506102f66102f1366004614e64565b61076a565b60405161030391906154c4565b60405180910390f35b34801561031857600080fd5b5061032161077f565b60405161030391906154cf565b61034161033c366004615108565b610785565b60405161030391906156a0565b34801561035a57600080fd5b50610321610369366004614e64565b6107c7565b34801561037a57600080fd5b506102f6610389366004614e64565b6107d9565b6103a161039c366004614f82565b6107ee565b005b6103b66103b1366004614d60565b610812565b60405161030391906159c2565b6103a16103d1366004614e64565b610939565b6103a16103e4366004614e64565b6109ac565b3480156103f557600080fd5b50610409610404366004614eed565b610ab9565b604051610303919061535b565b610429610424366004614c40565b610b07565b604051610303919061594b565b610429610444366004614c40565b610b3f565b6103a1610457366004614b2a565b610b5d565b6103b661046a366004614d60565b610c20565b34801561047b57600080fd5b506102f661048a366004614af6565b610d70565b34801561049b57600080fd5b506102f66104aa366004614ea0565b610d90565b3480156104bb57600080fd5b506102f66104ca366004614e7c565b610def565b3480156104db57600080fd5b50610409610e0f565b6104f76104f236600461500c565b610e2b565b60405161030391906159d0565b6103b6610512366004614d60565b610e49565b34801561052357600080fd5b506102f6610532366004615108565b610e7d565b34801561054357600080fd5b50610409610ea2565b61055f61055a366004614cdc565b610ebe565b60405161030391906154b1565b34801561057857600080fd5b506103a1610587366004614e64565b610fe9565b61055f61059a366004614cdc565b611031565b6103b66105ad3660046150a8565b6110f8565b3480156105be57600080fd5b506105d26105cd366004614f82565b61111d565b6040516103039190615a12565b3480156105eb57600080fd5b506102f66105fa366004614fb5565b611201565b6103b661060d366004614d60565b611226565b34801561061e57600080fd5b506103a161062d366004614b65565b61125a565b6104f761064036600461500c565b611306565b61055f610653366004614cdc565b611324565b34801561066457600080fd5b506103a1610673366004614adb565b6113d9565b34801561068457600080fd5b5061032161147c565b34801561069957600080fd5b506103a16106a8366004614adb565b611482565b3480156106b957600080fd5b506103216106c8366004614af6565b611616565b3480156106d957600080fd5b506106e2611633565b604051610303919061562b565b6103a16106fd366004614c0d565b611657565b6103b66107103660046150a8565b611699565b34801561072157600080fd5b506104096116b4565b34801561073657600080fd5b506103a1610745366004614adb565b6116d0565b61075d610758366004614db3565b611748565b6040516103039190615433565b60056020526000908152604090205460ff1681565b60035481565b606061078f61187b565b156107a55761079e838361189d565b90506107c1565b6107ad6119b7565b6107b7838361189d565b90506107c16119f9565b92915050565b60096020526000908152604090205481565b600a6020526000908152604090205460ff1681565b6107f6611a2b565b6107ff81611a9a565b610807611ad7565b61080f611aeb565b50565b61081a614561565b61082261187b565b156108b857835160005b8181146108b157600061084c846020015187611b1590919063ffffffff16565b9050610856614561565b61088788848151811061086557fe5b60200260200101518388868151811061087a57fe5b6020026020010151611b34565b90506108938582611c75565b9450868560200151106108a75750506108b1565b505060010161082c565b5050610932565b6108c06119b7565b835160005b8181146109285760006108e5846020015187611b1590919063ffffffff16565b90506108ef614561565b6108fe88848151811061086557fe5b905061090a8582611c75565b94508685602001511061091e575050610928565b50506001016108c5565b50506109326119f9565b9392505050565b610941611a2b565b600061094b611d10565b600083815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff90941683529290522080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905550610807611ad7565b6109b4611a2b565b60006109be611d10565b9050600073ffffffffffffffffffffffffffffffffffffffff821633146109e557336109e8565b60005b73ffffffffffffffffffffffffffffffffffffffff8084166000908152600b60209081526040808320938516835292905220549091506001840190808211610a3d57610a3d610a38858584611d42565b611de7565b73ffffffffffffffffffffffffffffffffffffffff8085166000818152600b602090815260408083209488168084529490915290819020859055517f82af639571738f4ebd4268fb0363d8957ebe1bbb9e78dba5ebd69eed39b154f090610aa59086906154cf565b60405180910390a350505050610807611ad7565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526002602052604090205473ffffffffffffffffffffffffffffffffffffffff165b919050565b610b0f614590565b610b17611a2b565b610b25858585856001611def565b9050610b2f611ad7565b610b37611aeb565b949350505050565b610b47614590565b610b4f611a2b565b610b25858585856000611def565b610b65611a2b565b6000610b6f611d10565b73ffffffffffffffffffffffffffffffffffffffff8181166000818152600860209081526040808320948916808452949091529081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168715151790555192935090917fa8656e308026eeabce8f0bc18048433252318ab80ac79da0b3d3d8697dfba89190610c039086906154c4565b60405180910390a350610c14611ad7565b610c1c611aeb565b5050565b610c28614561565b610c3061187b565b15610cee57835160005b8181146108b1578251600090610c5790879063ffffffff611b1516565b90506000610c94888481518110610c6a57fe5b602002602001015160a00151898581518110610c8257fe5b6020026020010151608001518461215c565b9050610c9e614561565b610cc2898581518110610cad57fe5b60200260200101518389878151811061087a57fe5b9050610cce8682611c75565b955087866000015110610ce3575050506108b1565b505050600101610c3a565b610cf66119b7565b835160005b818114610928578251600090610d1890879063ffffffff611b1516565b90506000610d2b888481518110610c6a57fe5b9050610d35614561565b610d44898581518110610cad57fe5b9050610d508682611c75565b955087866000015110610d6557505050610928565b505050600101610cfb565b600860209081526000928352604080842090915290825290205460ff1681565b600080610d9e85858561217e565b90506005816008811115610dae57fe5b1480610dc557506007816008811115610dc357fe5b145b15610dda57610dda610a3860058787876121fd565b610de6818686866122a5565b95945050505050565b600760209081526000928352604080842090915290825290205460ff1681565b60045473ffffffffffffffffffffffffffffffffffffffff1681565b610e336145b8565b610e3b611a2b565b610b25858585856000612515565b610e51614561565b610e5c848484610c20565b9050828160000151101561093257610932610a386000858460000151612602565b600080610e956001548561262190919063ffffffff16565b9050610b37848285612635565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b6060610ec861187b565b15610f6b578351604080518281526020808402820101909152818015610f0857816020015b610ef5614561565b815260200190600190039081610eed5790505b50915060005b8181146108b157610f4c868281518110610f2457fe5b6020026020010151868381518110610f3857fe5b602002602001015186848151811061087a57fe5b838281518110610f5857fe5b6020908102919091010152600101610f0e565b610f736119b7565b8351604080518281526020808402820101909152818015610fae57816020015b610f9b614561565b815260200190600190039081610f935790505b50915060005b81811461092857610fca868281518110610f2457fe5b838281518110610fd657fe5b6020908102919091010152600101610fb4565b610ff16126bb565b7f3a3e76d7a75e198aef1f53137e4f2a8a2ec74e2e9526db8404d08ccc9f1e621d60035482604051611024929190615543565b60405180910390a1600355565b606061103b611a2b565b835160408051828152602080840282010190915281801561107657816020015b611063614561565b81526020019060019003908161105b5790505b50915060005b8181146110e6576110c786828151811061109257fe5b60200260200101518683815181106110a657fe5b60200260200101518684815181106110ba57fe5b6020026020010151612702565b8382815181106110d357fe5b602090810291909101015260010161107c565b50506110f0611ad7565b610932611aeb565b611100614561565b611108611a2b565b611113848484612702565b90506110f0611ad7565b6111256145ec565b61112e826127a4565b60408301526020820152608082015161114e5760015b60ff168152610b02565b60a082015161115e576002611144565b8160a00151816040015110611174576005611144565b8161010001514210611187576004611144565b6020808201516000908152600a909152604090205460ff16156111ab576006611144565b610120820151825173ffffffffffffffffffffffffffffffffffffffff9081166000908152600b6020908152604080832060608801519094168352929052205411156111f8576006611144565b60038152919050565b600080611219600154856127d590919063ffffffff16565b9050610b378482856127e4565b61122e614561565b611239848484610812565b9050828160200151101561093257610932610a386001858460200151612602565b835160005b8181146112ca576112c28160001b87838151811061127957fe5b602002602001015187848151811061128d57fe5b60200260200101518785815181106112a157fe5b60200260200101518786815181106112b557fe5b6020026020010151612839565b60010161125f565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fd90615914565b60405180910390fd5b61130e6145b8565b611316611a2b565b610b25858585856001612515565b606061132e611a2b565b835160408051828152602080840282010190915281801561136957816020015b611356614561565b81526020019060019003908161134e5790505b50915060005b8181146110e6576113ba86828151811061138557fe5b602002602001015186838151811061139957fe5b60200260200101518684815181106113ad57fe5b60200260200101516129f3565b8382815181106113c657fe5b602090810291909101015260010161136f565b6113e16126bb565b6004546040517fe1a5430ebec577336427f40f15822f1f36c5e3509ff209d6db9e6c9e6941cb0b9161142d9173ffffffffffffffffffffffffffffffffffffffff90911690849061537c565b60405180910390a1600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60015481565b61148a6126bb565b60008173ffffffffffffffffffffffffffffffffffffffff1663ae25532e6040518163ffffffff1660e01b815260040160206040518083038186803b1580156114d257600080fd5b505afa1580156114e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061150a9190810190614f09565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526002602052604090205490915073ffffffffffffffffffffffffffffffffffffffff16801561156857611568610a388383612a26565b7fffffffff0000000000000000000000000000000000000000000000000000000082166000908152600260205260409081902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8616179055517fd2c6b762299c609bdb96520b58a49bfb80186934d4f71a86a367571a15c03194906116099084908690615658565b60405180910390a1505050565b600b60209081526000928352604080842090915290825290205481565b7f20c13b0b0000000000000000000000000000000000000000000000000000000081565b61165f611a2b565b805160005b81811461168f5761168783828151811061167a57fe5b6020026020010151611a9a565b600101611664565b5050610807611ad7565b6116a1614561565b6116a9611a2b565b6111138484846129f3565b60065473ffffffffffffffffffffffffffffffffffffffff1681565b6116d86126bb565b73ffffffffffffffffffffffffffffffffffffffff8116611703576116fe610a38612ac8565b61080f565b6000805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff000000000000000000000000000000000000000090911617905550565b606061175261187b565b156117f457825160408051828152602080840282010190915260609082801561178f57816020015b606081526020019060019003908161177a5790505b50905060005b8281146117eb576117cc8682815181106117ab57fe5b60200260200101518683815181106117bf57fe5b602002602001015161189d565b8282815181106117d857fe5b6020908102919091010152600101611795565b509150506107c1565b6117fc6119b7565b825160408051828152602080840282010190915260609082801561183457816020015b606081526020019060019003908161181f5790505b50905060005b82811461186f576118508682815181106117ab57fe5b82828151811061185c57fe5b602090810291909101015260010161183a565b509150506107c16119f9565b6000547501000000000000000000000000000000000000000000900460ff1690565b606060006118b66001548561262190919063ffffffff16565b90506118c3848483612aff565b60608401516118d28180612bd3565b60008281526005602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055608087015190516060913091611920919061530e565b600060405180830381855af49150503d806000811461195b576040519150601f19603f3d011682016040523d82523d6000602084013e611960565b606091505b50915091508161197757611977610a388583612c36565b611982836000612bd3565b60405184907fa4a7329f1dd821363067e07d359e347b4af9b1efe4b6cccf13240228af3c800d90600090a29695505050505050565b600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000179055565b600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055611a29612c53565b565b60005474010000000000000000000000000000000000000000900460ff1615611a5957611a59610a38612c88565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055565b611aa26145ec565b611aab8261111d565b9050611ab78282612cbf565b805160ff16600314611ac9575061080f565b610c1c828260200151612d6e565b611adf61187b565b611a2957611a29612c53565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b600082821115611b2e57611b2e610a3860028585612e17565b50900390565b611b3c614561565b6040516060907f9b44d5560000000000000000000000000000000000000000000000000000000090611b7690879087908790602401615a58565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050600060603073ffffffffffffffffffffffffffffffffffffffff1683604051611bfe919061530e565b600060405180830381855af49150503d8060008114611c39576040519150601f19603f3d011682016040523d82523d6000602084013e611c3e565b606091505b50915091508115611c6b57805160a014611c5457fe5b80806020019051611c689190810190614f25565b93505b5050509392505050565b611c7d614561565b81518351611c909163ffffffff612e3616565b815260208083015190840151611cab9163ffffffff612e3616565b602082015260408083015190840151611cc99163ffffffff612e3616565b604082015260608083015190840151611ce79163ffffffff612e3616565b606082015260808083015190840151611d059163ffffffff612e3616565b608082015292915050565b60065460009073ffffffffffffffffffffffffffffffffffffffff16818115611d395781611d3b565b335b9250505090565b6060634ad3127560e01b848484604051602401611d61939291906153a3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290509392505050565b805160208201fd5b611df7614590565b8551611e0a57611e0a610a386000612e52565b8451611e1d57611e1d610a386001612e52565b8351865114611e3357611e33610a386002612e52565b8251855114611e4957611e49610a386003612e52565b8551604051908082528060200260200182016040528015611e8457816020015b611e71614561565b815260200190600190039081611e695790505b5081528451604080518281526020808402820101909152908015611ec257816020015b611eaf614561565b815260200190600190039081611ea75790505b506020820152600080611ed361460c565b88600081518110611ee057fe5b60200260200101519050611ef261460c565b88600081518110611eff57fe5b602002602001015190506000611f14836127a4565b9150506000611f22836127a4565b915050611f2d614561565b611f35614561565b611f3d6145b8565b611f7087878f8c81518110611f4e57fe5b60200260200101518f8c81518110611f6257fe5b60200260200101518f612515565b805160200151909150611f8a90869063ffffffff612e3616565b9450611fa781602001516020015185612e3690919063ffffffff16565b9350611fb7838260000151611c75565b9250611fc7828260200151611c75565b9150611fe481604001518b60400151612e3690919063ffffffff16565b60408b0152606080820151908b01516120029163ffffffff612e3616565b60608b015260a087015185106120ad578951805160018b019a859291811061202657fe5b60200260200101819052506040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525092508e5189141561208a57818a60200151898151811061207957fe5b60200260200101819052505061214b565b8e898151811061209657fe5b602002602001015196506120a9876127a4565b9550505b8560a00151841061214557818a6020015189806001019a50815181106120cf57fe5b60200260200101819052506040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525091508d5188141561212257828a600001518a8151811061207957fe5b8d888151811061212e57fe5b60200260200101519550612141866127a4565b9450505b50611f35565b505050505050505095945050505050565b6000610b3783612172868563ffffffff612ef116565b9063ffffffff612f2216565b600061218b848484612f4c565b905073ffffffffffffffffffffffffffffffffffffffff83166121b8576121b8610a3860068686866121fd565b600881818111156121c557fe5b60ff16106121dd576121dd610a3860038686866121fd565b60008160088111156121eb57fe5b141561093257610932610a3860048686865b6060637e5a231860e01b8585858560405160240161221e94939291906158b9565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050949350505050565b600060018560088111156122b557fe5b14156122dc5781516001146122d4576122d4610a3860028686866121fd565b506000610b37565b60028560088111156122ea57fe5b14156123e357815160421461230957612309610a3860028686866121fd565b60008260008151811061231857fe5b016020015160f81c9050600061233584600163ffffffff612f8b16565b9050600061234a85602163ffffffff612f8b16565b9050600060018885858560405160008152602001604052604051612371949392919061560d565b6020604051602081039080840390855afa158015612393573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015173ffffffffffffffffffffffffffffffffffffffff8981169116149550610b37945050505050565b60038560088111156123f157fe5b141561249e57815160421461241057612410610a3860028686866121fd565b60008260008151811061241f57fe5b016020015160f81c9050600061243c84600163ffffffff612f8b16565b9050600061245185602163ffffffff612f8b16565b90506000600188604051602001612468919061532a565b6040516020818303038152906040528051906020012085858560405160008152602001604052604051612371949392919061560d565b60048560088111156124ac57fe5b14156124c4576124bd848484612fb5565b9050610b37565b60068560088111156124d257fe5b146124d957fe5b50600083815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915290205460ff16949350505050565b61251d6145b8565b61016080870151610140808801919091528701519086015261253d6145ec565b6125468761111d565b90506125506145ec565b6125598761111d565b90506000612565611d10565b90506125738984838a6131ab565b61257f888383896131ab565b6125938989856020015185602001516132e1565b6125ac8989856040015185604001516003543a8b61332c565b93506125c78982856020015186604001518860000151613481565b6125e08882846020015185604001518860200151613481565b6125f6836020015183602001518b8b858961355f565b50505095945050505050565b60606318e4b14160e01b848484604051602401611d619392919061589e565b60006109328261263085613706565b61378e565b60608301516000908161264985838661217e565b9050600581600881111561265957fe5b141561267b5761267461266c87876137c8565b868487613800565b92506126b2565b600781600881111561268957fe5b14156126a35761267461269c87876137c8565b83866138b4565b6126af818684876122a5565b92505b50509392505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611a2957600054611a2990610a3890339073ffffffffffffffffffffffffffffffffffffffff166138c3565b61270a614561565b6127126145ec565b61271b8561111d565b90506000612727611d10565b9050612735868383876131ab565b600061275283604001518860a00151611b1590919063ffffffff16565b9050600061276087836138e0565b905061277088826003543a6138f6565b945060008460200151905061278c89858388604001518a613481565b612798818a868961396d565b50505050509392505050565b6000806127bc600154846127d590919063ffffffff16565b6000818152600960205260409020549092509050915091565b60006109328261263085613a04565b8251600090816127f585838661217e565b9050600581600881111561280557fe5b14156128185761267461266c8787613adb565b600781600881111561282657fe5b14156126a35761267461269c8787613adb565b80156129ec57600384511161285757612857610a3860008787613b13565b6000612869858263ffffffff613b3216565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526002602052604090205490915073ffffffffffffffffffffffffffffffffffffffff16806128c8576128c8610a3860018989613b13565b6040516060907fa85e59e400000000000000000000000000000000000000000000000000000000906129049089908990899089906024016156b3565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050600060608373ffffffffffffffffffffffffffffffffffffffff168360405161298c919061530e565b6000604051808303816000865af19150503d80600081146129c9576040519150601f19603f3d011682016040523d82523d6000602084013e6129ce565b606091505b5091509150816129e6576129e6610a388b8b84613b7e565b50505050505b5050505050565b6129fb614561565b612a06848484612702565b90508281602001511461093257610932610a386002858460200151612602565b60606311c7b72060e01b8383604051602401612a43929190615658565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905092915050565b60408051808201909152600481527fe69edc3e00000000000000000000000000000000000000000000000000000000602082015290565b82602001514210612b1857612b18610a38600183613b9d565b60408301513a8114612b3257612b32610a38833a84613bba565b60065473ffffffffffffffffffffffffffffffffffffffff168015612b5e57612b5e610a388483613bd9565b60008381526005602052604090205460ff1615612b8357612b83610a38600085613b9d565b606085015173ffffffffffffffffffffffffffffffffffffffff81163314801590612bb65750612bb4868587612635565b155b15612bcb57612bcb610a3860018684896121fd565b505050505050565b73ffffffffffffffffffffffffffffffffffffffff82163314610c1c576006805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff00000000000000000000000000000000000000009091161790555050565b60606320d11f6160e01b8383604051602401612a43929190615551565b3031801561080f57604051339082156108fc029083906000818181858888f19350505050158015610c1c573d6000803e3d6000fd5b60408051808201909152600481527f0c3b823f00000000000000000000000000000000000000000000000000000000602082015290565b606082015173ffffffffffffffffffffffffffffffffffffffff1615612d1357606082015173ffffffffffffffffffffffffffffffffffffffff163314612d1357612d13610a386002836020015133613bf6565b6000612d1d611d10565b90508073ffffffffffffffffffffffffffffffffffffffff16836000015173ffffffffffffffffffffffffffffffffffffffff1614612d6957612d69610a386000846020015184613bf6565b505050565b6000818152600a60205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558281015183516101408501516101608601519351859473ffffffffffffffffffffffffffffffffffffffff9485169493909316927f02c310a9a43963ff31a754a4099cc435ed498049687539d72d7818d9b093415c92612e0b92909190339061571b565b60405180910390a45050565b606063e946c1bb60e01b848484604051602401611d6193929190615846565b60008282018381101561093257610932610a3860008686612e17565b606063d4092f4f60e01b82604051602401612e6d9190615833565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050919050565b600082612f00575060006107c1565b82820282848281612f0d57fe5b041461093257610932610a3860018686612e17565b600081612f3857612f38610a3860038585612e17565b6000828481612f4357fe5b04949350505050565b6000815160001415612f6857612f68610a3860028686866121fd565b81600183510381518110612f7857fe5b016020015160f81c6008811115610b3757fe5b60008160200183511015612fac57612fac610a386005855185602001613c15565b50016020015190565b8051600090612fec837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830163ffffffff613c3416565b6040516060907f1626ba7e00000000000000000000000000000000000000000000000000000000906130249088908790602401615551565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290506130b3848363ffffffff613c3416565b600060608673ffffffffffffffffffffffffffffffffffffffff16836040516130dc919061530e565b600060405180830381855afa9150503d8060008114613117576040519150601f19603f3d011682016040523d82523d6000602084013e61311c565b606091505b509150915081801561312f575080516020145b15613191577fb06713810000000000000000000000000000000000000000000000000000000061316682600063ffffffff613b3216565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614945050505050610932565b6131a0610a3889898985613c38565b505050509392505050565b825160ff166003146131da576131da610a388460200151856000015160ff1660068111156131d557fe5b613c59565b606084015173ffffffffffffffffffffffffffffffffffffffff161561322e57606084015173ffffffffffffffffffffffffffffffffffffffff16331461322e5761322e610a386002856020015133613bf6565b602084015173ffffffffffffffffffffffffffffffffffffffff1615613298578173ffffffffffffffffffffffffffffffffffffffff16846020015173ffffffffffffffffffffffffffffffffffffffff161461329857613298610a386001856020015185613bf6565b8351604084015115806132b557506132b584602001518284613c76565b156129ec576132c9858560200151846127e4565b6129ec576129ec610a386000866020015184866121fd565b60a080840151908501516132fa9163ffffffff612ef116565b608080850151908601516133139163ffffffff612ef116565b101561332657613326610a388383613cc9565b50505050565b6133346145b8565b60a088015160009061334c908863ffffffff611b1516565b905060006133638a608001518b60a0015184613ce6565b9050600061337e888b60a00151611b1590919063ffffffff16565b905060006133958b608001518c60a0015184613ce6565b905085156133b2576133ab8c8c85878587613d1a565b94506133c3565b6133c08c8c85878587613dec565b94505b84515160808d015160c08e01516133db929190613ce6565b85516040015284516020015160a08d015160e08e01516133fc929190613ce6565b85516060015260208501515160808c015160c08d015161341d929190613ce6565b856020015160400181815250506134458560200151602001518c60a001518d60e00151613ce6565b6020860151606001526000613460888a63ffffffff612ef116565b86516080908101829052602088015101525050505050979650505050505050565b602081015161349790839063ffffffff612e3616565b600960008581526020019081526020016000208190555082856040015173ffffffffffffffffffffffffffffffffffffffff16866000015173ffffffffffffffffffffffffffffffffffffffff167f6869791f0a34781b29882982cc39e882768cf2c96995c2a110c577c53bc932d58861014001518961016001518a61018001518b6101a001518b338a600001518b602001518c604001518d606001518e608001516040516135509b9a99989796959493929190615767565b60405180910390a45050505050565b8351835160408087015190860151610140870151855160200151613588918b9186908890612839565b6135a28a8961014001518686896020015160200151612839565b6135bc898861018001518584896020015160400151612839565b6135d68a8961018001518685896000015160400151612839565b6135ec8a89610140015186898960400151612839565b6136028988610140015185898960600151612839565b600061361a8b8b88600001516080015188888c613e85565b905080613637578551600060809182018190526020880151909101525b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561368757506101a080890151908a01516136879163ffffffff613ee216565b156136c5576136c08b8a6101a0015189866136bb8b60200151606001518c6000015160600151612e3690919063ffffffff16565b612839565b6136f9565b6136df8a896101a0015189858a6020015160600151612839565b6136f98b8a6101a0015189868a6000015160600151612839565b5050505050505050505050565b608081810151825160208085015160408087015160609788015186519685019690962082517fec69816980a3a3ca4554410e60253953e9ff375ba4536a98adfa15cc71541508815294850195909552908301919091529481019490945273ffffffffffffffffffffffffffffffffffffffff9091169183019190915260a082015260c0902090565b6040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6040516060907fde047db40000000000000000000000000000000000000000000000000000000090612a439085908590602401615a83565b8051600090601581101561381e5761381e610a3860028787876121fd565b6000613852847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb840163ffffffff613f0716565b73ffffffffffffffffffffffffffffffffffffffff80871660009081526008602090815260408083209385168352929052205490915060ff1661389c5761389c610a388683613f47565b6138a98188866015613f64565b979650505050505050565b6000610b378385846001613f64565b6060631de45ad160e01b8383604051602401612a4392919061537c565b60008183106138ef5781610932565b5090919050565b6138fe614561565b6020810184905260a0850151608086015161391a918691613ce6565b815260a085015160c0860151613931918691613ce6565b604082015260a085015160e086015161394b918691613ce6565b6060820152613960828463ffffffff612ef116565b6080820152949350505050565b613987848461016001518486600001518560200151612839565b6139a1848461014001518560000151858560000151612839565b6139bb84846101a001518486604001518560600151612839565b6139d984846101800151856000015186604001518560400151612839565b60006139ef85836080015186600001518661413b565b9050806129ec57600060808301525050505050565b6101408101516101608201516101808301516101a08401516000937ff80322eb8376aafb64eadf8f0d7623f22130fd9491a221e902b713cb984a753493909290916020871015613a5057fe5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe087018051610140890180516101608b0180516101808d0180516101a08f0180519d89528c5160209d8e012087528b519b8d019b909b2084528951998c01999099208152875197909a019690962088526101e085209390945290529190529252919091529050919050565b6040516060907f3efe50c80000000000000000000000000000000000000000000000000000000090612a439085908590602401615a36565b606063488219a660e01b848484604051602401611d619392919061580b565b60008160040183511015613b5357613b53610a386003855185600401613c15565b5001602001517fffffffff000000000000000000000000000000000000000000000000000000001690565b6060634678472b60e01b848484604051602401611d619392919061556a565b606063f598518460e01b8383604051602401612a439291906158fd565b606063a26dac0960e01b848484604051602401611d61939291906155f7565b606063dec4aedf60e01b8383604051602401612a439291906154d8565b606063e53c76c860e01b848484604051602401611d6193929190615867565b6060632800659560e01b848484604051602401611d61939291906158ab565b9052565b6060631b8388f760e01b8585858560405160240161221e94939291906154fc565b606063fdb6ca8d60e01b8383604051602401612a43929190615595565b600080613c84858585612f4c565b90506004816008811115613c9457fe5b1480613cab57506005816008811115613ca957fe5b145b80610de657506007816008811115613cbf57fe5b1495945050505050565b606063b6555d6f60e01b8383604051602401612a43929190615543565b6000613cf3848484614181565b15613d0657613d06610a388585856141e7565b610b3783612172868563ffffffff612ef116565b613d226145b8565b81851184841184861115613d4257613d3b898686614206565b9250613d91565b86841115613d825782518790528251602001869052608088015160a0890151613d6c919089613ce6565b6020808501805192909252905101879052613d91565b613d8e87878787614243565b92505b8115613db7576020808401510151835151613db19163ffffffff611b1516565b60408401525b8015613ddf5782516020908101519084015151613dd99163ffffffff611b1516565b60608401525b50505b9695505050505050565b613df46145b8565b82841115613e0e57613e07878484614206565b9050613e5c565b82841015613e4d5780518590528051602090810185905281015184905260a08601516080870151613e4091908661426e565b6020808301510152613e5c565b613e5985858585614243565b90505b6020808201510151815151613e769163ffffffff611b1516565b60408201529695505050505050565b60045460009073ffffffffffffffffffffffffffffffffffffffff168015613ed85730316000613eb98a84848b8b8a6142c2565b9050613ecb89848385038b8a8a6142c2565b5060019350505050613de2565b6000915050613de2565b6000815183511480156109325750508051602091820120825192909101919091201490565b60008160140183511015613f2857613f28610a386004855185601401613c15565b50016014015173ffffffffffffffffffffffffffffffffffffffff1690565b606063a15c0d0660e01b8383604051602401612a4392919061537c565b8151600090613f7b8484830363ffffffff613c3416565b6040516060907f20c13b0b0000000000000000000000000000000000000000000000000000000090613fb390889088906024016156f6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050614042858363ffffffff613c3416565b600060608873ffffffffffffffffffffffffffffffffffffffff168360405161406b919061530e565b600060405180830381855afa9150503d80600081146140a6576040519150601f19603f3d011682016040523d82523d6000602084013e6140ab565b606091505b50915091508180156140be575080516020145b15614120577f20c13b0b000000000000000000000000000000000000000000000000000000006140f582600063ffffffff613b3216565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614945050505050610b37565b61412f610a388a8a8a856143fa565b50505050949350505050565b60045460009073ffffffffffffffffffffffffffffffffffffffff1680156141775761416c868230318888886142c2565b506001915050610b37565b6000915050610b37565b60008261419357614193610a3861441b565b81158061419e575083155b156141ab57506000610932565b600083806141b557fe5b85840990506141ca858463ffffffff612ef116565b6141dc826103e863ffffffff612ef116565b101595945050505050565b606063339f3de260e01b848484604051602401611d61939291906155f7565b61420e6145b8565b60208082018051859052518101839052815101839052608084015160a0850151614239919085613ce6565b8151529392505050565b61424b6145b8565b805194909452835160209081019390935282840180519290925290519091015290565b600061427b848484614452565b1561428e5761428e610a388585856141e7565b610b37836121726142a682600163ffffffff611b1516565b6142b6888763ffffffff612ef116565b9063ffffffff612e3616565b60008385106142ce5750825b6040516060907fa3b4a3270000000000000000000000000000000000000000000000000000000090614308908690869089906024016153a3565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050600060608873ffffffffffffffffffffffffffffffffffffffff168484604051614391919061530e565b60006040518083038185875af1925050503d80600081146143ce576040519150601f19603f3d011682016040523d82523d6000602084013e6143d3565b606091505b5091509150816143ed576143ed610a388b898989866144b6565b5050509695505050505050565b6060635bd0428d60e01b8585858560405160240161221e94939291906153d4565b60408051808201909152600481527fa791837c00000000000000000000000000000000000000000000000000000000602082015290565b60008261446457614464610a3861441b565b81158061446f575083155b1561447c57506000610932565b6000838061448657fe5b85840990508361449c818363ffffffff611b1516565b816144a357fe5b0690506141ca858463ffffffff612ef116565b60606387cb1e7560e01b86868686866040516024016144d99594939291906155b2565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905095945050505050565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6040518060800160405280606081526020016060815260200160008152602001600081525090565b60405180608001604052806145cb614561565b81526020016145d8614561565b815260200160008152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b604051806101c00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001606081525090565b803573ffffffffffffffffffffffffffffffffffffffff811681146107c157600080fd5b600082601f830112614707578081fd5b813561471a61471582615b14565b615aed565b81815291506020808301908481018184028601820187101561473b57600080fd5b60005b848110156147625761475088836146d3565b8452928201929082019060010161473e565b505050505092915050565b600082601f83011261477d578081fd5b813561478b61471582615b14565b8181529150602080830190840160005b838110156147c8576147b3876020843589010161488b565b8352602092830192919091019060010161479b565b5050505092915050565b600082601f8301126147e2578081fd5b81356147f061471582615b14565b8181529150602080830190840160005b838110156147c8576148188760208435890101614912565b83526020928301929190910190600101614800565b600082601f83011261483d578081fd5b813561484b61471582615b14565b81815291506020808301908481018184028601820187101561486c57600080fd5b60005b848110156147625781358452928201929082019060010161486f565b600082601f83011261489b578081fd5b813567ffffffffffffffff8111156148b1578182fd5b6148e260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615aed565b91508082528360208285010111156148f957600080fd5b8060208401602084013760009082016020015292915050565b60006101c0808385031215614925578182fd5b61492e81615aed565b91505061493b83836146d3565b815261494a83602084016146d3565b602082015261495c83604084016146d3565b604082015261496e83606084016146d3565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e08201526101008083013581830152506101208083013581830152506101408083013567ffffffffffffffff808211156149d057600080fd5b6149dc8683870161488b565b838501526101609250828501359150808211156149f857600080fd5b614a048683870161488b565b83850152610180925082850135915080821115614a2057600080fd5b614a2c8683870161488b565b838501526101a0925082850135915080821115614a4857600080fd5b50614a558582860161488b565b82840152505092915050565b600060a08284031215614a72578081fd5b614a7c60a0615aed565b90508135815260208201356020820152604082013560408201526060820135614aa481615b88565b6060820152608082013567ffffffffffffffff811115614ac357600080fd5b614acf8482850161488b565b60808301525092915050565b600060208284031215614aec578081fd5b61093283836146d3565b60008060408385031215614b08578081fd5b614b1284846146d3565b9150614b2184602085016146d3565b90509250929050565b60008060408385031215614b3c578182fd5b614b4684846146d3565b915060208301358015158114614b5a578182fd5b809150509250929050565b60008060008060808587031215614b7a578182fd5b843567ffffffffffffffff80821115614b91578384fd5b614b9d8883890161476d565b95506020870135915080821115614bb2578384fd5b614bbe888389016146f7565b94506040870135915080821115614bd3578384fd5b614bdf888389016146f7565b93506060870135915080821115614bf4578283fd5b50614c018782880161482d565b91505092959194509250565b600060208284031215614c1e578081fd5b813567ffffffffffffffff811115614c34578182fd5b610b37848285016147d2565b60008060008060808587031215614c55578182fd5b843567ffffffffffffffff80821115614c6c578384fd5b614c78888389016147d2565b95506020870135915080821115614c8d578384fd5b614c99888389016147d2565b94506040870135915080821115614cae578384fd5b614cba8883890161476d565b93506060870135915080821115614ccf578283fd5b50614c018782880161476d565b600080600060608486031215614cf0578081fd5b833567ffffffffffffffff80821115614d07578283fd5b614d13878388016147d2565b94506020860135915080821115614d28578283fd5b614d348783880161482d565b93506040860135915080821115614d49578283fd5b50614d568682870161476d565b9150509250925092565b600080600060608486031215614d74578081fd5b833567ffffffffffffffff80821115614d8b578283fd5b614d97878388016147d2565b9450602086013593506040860135915080821115614d49578283fd5b60008060408385031215614dc5578182fd5b823567ffffffffffffffff80821115614ddc578384fd5b81850186601f820112614ded578485fd5b80359250614dfd61471584615b14565b83815260208082019190838101885b87811015614e3557614e238c848435890101614a61565b85529382019390820190600101614e0c565b50919750880135945050505080821115614e4d578283fd5b50614e5a8582860161476d565b9150509250929050565b600060208284031215614e75578081fd5b5035919050565b60008060408385031215614e8e578182fd5b823591506020830135614b5a81615b88565b600080600060608486031215614eb4578081fd5b833592506020840135614ec681615b88565b9150604084013567ffffffffffffffff811115614ee1578182fd5b614d568682870161488b565b600060208284031215614efe578081fd5b813561093281615baa565b600060208284031215614f1a578081fd5b815161093281615baa565b600060a0828403128015614f37578182fd5b8015614f41578182fd5b50614f4c60a0615aed565b82518152602083015160208201526040830151604082015260608301516060820152608083015160808201528091505092915050565b600060208284031215614f93578081fd5b813567ffffffffffffffff811115614fa9578182fd5b610b3784828501614912565b60008060408385031215614fc7578182fd5b823567ffffffffffffffff80821115614fde578384fd5b614fea86838701614912565b93506020850135915080821115614fff578283fd5b50614e5a8582860161488b565b60008060008060808587031215615021578182fd5b843567ffffffffffffffff80821115615038578384fd5b61504488838901614912565b95506020870135915080821115615059578384fd5b61506588838901614912565b9450604087013591508082111561507a578384fd5b6150868883890161488b565b9350606087013591508082111561509b578283fd5b50614c018782880161488b565b6000806000606084860312156150bc578081fd5b833567ffffffffffffffff808211156150d3578283fd5b6150df87838801614912565b94506020860135935060408601359150808211156150fb578283fd5b50614d568682870161488b565b6000806040838503121561511a578182fd5b823567ffffffffffffffff80821115615131578384fd5b614fea86838701614a61565b73ffffffffffffffffffffffffffffffffffffffff169052565b6000815180845260208401935060208301825b828110156151935761517d8683516151e7565b60a095909501946020919091019060010161516a565b5093949350505050565b600081518084526151b5816020860160208601615b34565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b80518252602081015160208301526040810151604083015260608101516060830152608081015160808301525050565b60006101c061522784845161513d565b6020830151615239602086018261513d565b50604083015161524c604086018261513d565b50606083015161525f606086018261513d565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e08501526101008084015181860152506101208084015181860152506101408084015182828701526152b88387018261519d565b915050610160915081840151858203838701526152d5828261519d565b9250505061018080840151858303828701526152f1838261519d565b9150506101a091508184015185820383870152613de2828261519d565b60008251615320818460208701615b34565b9190910192915050565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b600073ffffffffffffffffffffffffffffffffffffffff8616825260806020830152615403608083018661519d565b8281036040840152615415818661519d565b8381036060850152615427818661519d565b98975050505050505050565b6000602080830181845280855180835260408601915060408482028701019250838701855b828110156154a4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261549285835161519d565b94509285019290850190600101615458565b5092979650505050505050565b6000602082526109326020830184615157565b901515815260200190565b90815260200190565b91825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b600085825273ffffffffffffffffffffffffffffffffffffffff8516602083015260806040830152615531608083018561519d565b82810360608401526138a9818561519d565b918252602082015260400190565b600083825260406020830152610b37604083018461519d565b600084825260606020830152615583606083018561519d565b8281036040840152613de2818561519d565b828152604081016155a583615b7e565b8260208301529392505050565b600086825285602083015273ffffffffffffffffffffffffffffffffffffffff808616604084015280851660608401525060a060808301526138a960a083018461519d565b9283526020830191909152604082015260600190565b93845260ff9290921660208401526040830152606082015260800190565b7fffffffff0000000000000000000000000000000000000000000000000000000091909116815260200190565b7fffffffff0000000000000000000000000000000000000000000000000000000092909216825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b600060208252610932602083018461519d565b6000608082526156c6608083018761519d565b73ffffffffffffffffffffffffffffffffffffffff95861660208401529390941660408201526060015292915050565b600060408252615709604083018561519d565b8281036020840152610de6818561519d565b60006060825261572e606083018661519d565b8281036020840152615740818661519d565b91505073ffffffffffffffffffffffffffffffffffffffff83166040830152949350505050565b600061016080835261577b8184018f61519d565b838103602085015261578d818f61519d565b91505082810360408401526157a2818d61519d565b83810360608501526157b4818d61519d565b73ffffffffffffffffffffffffffffffffffffffff9b8c16608086015299909a1660a0840152505060c081019590955260e08501939093526101008401919091526101208301526101409091015295945050505050565b600061581685615b60565b84825283602083015260606040830152610de6606083018461519d565b6020810161584083615b6a565b91905290565b6060810161585385615b6a565b938152602081019290925260409091015290565b6060810161587485615b74565b938152602081019290925273ffffffffffffffffffffffffffffffffffffffff1660409091015290565b6060810161585385615b74565b606081016008851061585357fe5b60006158c486615b7e565b85825284602083015273ffffffffffffffffffffffffffffffffffffffff8416604083015260806060830152613de2608083018461519d565b6040810161590a84615b60565b9281526020015290565b60208082526014908201527f5452414e53464552535f5355434345535346554c000000000000000000000000604082015260600190565b60006020825282516080602084015261596760a0840182615157565b602085015191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08482030160408501526159a28183615157565b604086015160608601526060860151608086015280935050505092915050565b60a081016107c182846151e7565b6000610180820190506159e48284516151e7565b60208301516159f660a08401826151e7565b5060408301516101408301526060909201516101609091015290565b815160ff168152602080830151908201526040918201519181019190915260600190565b600060408252615a496040830185615217565b90508260208301529392505050565b600060608252615a6b6060830186615217565b8460208401528281036040840152613de2818561519d565b60006040825283516040830152602084015160608301526040840151608083015273ffffffffffffffffffffffffffffffffffffffff60608501511660a0830152608084015160a060c0840152615add60e084018261519d565b9150508260208301529392505050565b60405181810167ffffffffffffffff81118282101715615b0c57600080fd5b604052919050565b600067ffffffffffffffff821115615b2a578081fd5b5060209081020190565b60005b83811015615b4f578181015183820152602001615b37565b838111156133265750506000910152565b6002811061080f57fe5b6004811061080f57fe5b6003811061080f57fe5b6007811061080f57fe5b73ffffffffffffffffffffffffffffffffffffffff8116811461080f57600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008116811461080f57600080fd5b8351602094850120835193850193909320604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f815295860194909452928401929092526060830152608082015260a090209056fea365627a7a723158206fc97c5a1d6fde6b2ada9eb4429966e52d7e2da39180893c04bf55c840b346a16c6578706572696d656e74616cf564736f6c634300050c0040" + "object": "0x60806040526000805460ff60a01b191690553480156200001e57600080fd5b5060405162005dbb38038062005dbb833981016040819052620000419162000117565b600080546001600160a01b03191633178155819080309050620000b26040518060400160405280600b81526020016a0c1e08141c9bdd1bd8dbdb60aa1b815250604051806040016040528060058152602001640332e302e360dc1b8152508584620000c060201b62005be11760201c565b600155506200013092505050565b8351602094850120835193850193909320604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f815295860194909452928401929092526060830152608082015260a0902090565b60006020828403121562000129578081fd5b5051919050565b615c7b80620001406000396000f3fe6080604052600436106102dc5760003560e01c80638d45cd2311610184578063beee2e14116100d6578063dd885e2d1161008a578063eea086ba11610064578063eea086ba14610735578063f2fde38b1461074a578063fc74896d1461076a576102dc565b8063dd885e2d146106ed578063dedfc1f11461070f578063e14b58c414610722576102dc565b8063c26cfecd116100bb578063c26cfecd14610698578063c585bb93146106ad578063d9bfa73e146106cd576102dc565b8063beee2e1414610665578063c0fa16cc14610678576102dc565b80639b44d55611610138578063a6c3bf3311610112578063a6c3bf331461061f578063b04fbddd14610632578063b718e29214610652576102dc565b80639b44d556146105bf5780639d3fa4b9146105d2578063a12dcc6f146105ff576102dc565b80638ea8dfe4116101695780638ea8dfe41461056c5780639331c7421461058c5780639694a402146105ac576102dc565b80638d45cd23146105375780638da5cb5b14610557576102dc565b8063607041081161023d5780637b8e3514116101f1578063850a1501116101cb578063850a1501146104ef57806388ec79fb146105045780638bc8efb314610524576102dc565b80637b8e35141461048f5780638171c407146104af57806382c174d0146104cf576102dc565b80636fcf3e9e116102225780636fcf3e9e1461045657806377fcce681461046957806378d29ac11461047c576102dc565b806360704108146104095780636a1a80fd14610436576102dc565b80632ac1262211610294578063369da09911610279578063369da099146103c357806346c02d7a146103e35780634f9559b1146103f6576102dc565b80632ac12622146103905780632da62987146103b0576102dc565b80631ce4c78b116102c55780631ce4c78b1461032e5780632280c91014610350578063288cdc9114610370576102dc565b80630228e168146102e15780630efca18514610317575b600080fd5b3480156102ed57600080fd5b506103016102fc366004614e6f565b61078a565b60405161030e91906154c3565b60405180910390f35b34801561032357600080fd5b5061032c61079f565b005b34801561033a57600080fd5b506103436107b3565b60405161030e91906154ce565b61036361035e366004615107565b6107b9565b60405161030e919061569f565b34801561037c57600080fd5b5061034361038b366004614e6f565b6107fb565b34801561039c57600080fd5b506103016103ab366004614e6f565b61080d565b61032c6103be366004614f81565b610822565b6103d66103d1366004614d6b565b610846565b60405161030e91906159c1565b61032c6103f1366004614e6f565b61096d565b61032c610404366004614e6f565b6109e0565b34801561041557600080fd5b50610429610424366004614ef8565b610aed565b60405161030e919061535a565b610449610444366004614c4b565b610b3b565b60405161030e919061594a565b610449610464366004614c4b565b610b73565b61032c610477366004614b35565b610b91565b6103d661048a366004614d6b565b610c54565b34801561049b57600080fd5b506103016104aa366004614b01565b610da4565b3480156104bb57600080fd5b506103016104ca366004614eab565b610dc4565b3480156104db57600080fd5b506103016104ea366004614e87565b610e23565b3480156104fb57600080fd5b50610429610e43565b61051761051236600461500b565b610e5f565b60405161030e91906159cf565b6103d6610532366004614d6b565b610e7d565b34801561054357600080fd5b50610301610552366004615107565b610eb1565b34801561056357600080fd5b50610429610ed6565b61057f61057a366004614ce7565b610ef2565b60405161030e91906154b0565b34801561059857600080fd5b5061032c6105a7366004614e6f565b61101d565b61057f6105ba366004614ce7565b611065565b6103d66105cd3660046150a7565b61112c565b3480156105de57600080fd5b506105f26105ed366004614f81565b611151565b60405161030e9190615a11565b34801561060b57600080fd5b5061030161061a366004614fb4565b611246565b6103d661062d366004614d6b565b61126b565b34801561063e57600080fd5b5061032c61064d366004614b70565b61129f565b61051761066036600461500b565b61134b565b61057f610673366004614ce7565b611369565b34801561068457600080fd5b5061032c610693366004614ae6565b61141e565b3480156106a457600080fd5b5061034361142f565b3480156106b957600080fd5b5061032c6106c8366004614ae6565b611435565b3480156106d957600080fd5b506103436106e8366004614b01565b6115c9565b3480156106f957600080fd5b506107026115e6565b60405161030e919061562a565b61032c61071d366004614c18565b61160a565b6103d66107303660046150a7565b61164c565b34801561074157600080fd5b50610429611667565b34801561075657600080fd5b5061032c610765366004614ae6565b611683565b61077d610778366004614dbe565b611726565b60405161030e9190615432565b60056020526000908152604090205460ff1681565b6107a761184f565b6107b16000611896565b565b60035481565b60606107c3611931565b156107d9576107d28383611953565b90506107f5565b6107e1611a6d565b6107eb8383611953565b90506107f5611aaf565b92915050565b60096020526000908152604090205481565b600a6020526000908152604090205460ff1681565b61082a611adf565b61083381611b4e565b61083b611b93565b610843611ba7565b50565b61084e61456a565b610856611931565b156108ec57835160005b8181146108e5576000610880846020015187611bd190919063ffffffff16565b905061088a61456a565b6108bb88848151811061089957fe5b6020026020010151838886815181106108ae57fe5b6020026020010151611bf0565b90506108c78582611d31565b9450868560200151106108db5750506108e5565b5050600101610860565b5050610966565b6108f4611a6d565b835160005b81811461095c576000610919846020015187611bd190919063ffffffff16565b905061092361456a565b61093288848151811061089957fe5b905061093e8582611d31565b94508685602001511061095257505061095c565b50506001016108f9565b5050610966611aaf565b9392505050565b610975611adf565b600061097f611dcc565b600083815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff90941683529290522080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555061083b611b93565b6109e8611adf565b60006109f2611dcc565b9050600073ffffffffffffffffffffffffffffffffffffffff82163314610a195733610a1c565b60005b73ffffffffffffffffffffffffffffffffffffffff8084166000908152600b60209081526040808320938516835292905220549091506001840190808211610a7157610a71610a6c858584611dfe565b611ea3565b73ffffffffffffffffffffffffffffffffffffffff8085166000818152600b602090815260408083209488168084529490915290819020859055517f82af639571738f4ebd4268fb0363d8957ebe1bbb9e78dba5ebd69eed39b154f090610ad99086906154ce565b60405180910390a35050505061083b611b93565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526002602052604090205473ffffffffffffffffffffffffffffffffffffffff165b919050565b610b43614599565b610b4b611adf565b610b59858585856001611eab565b9050610b63611b93565b610b6b611ba7565b949350505050565b610b7b614599565b610b83611adf565b610b59858585856000611eab565b610b99611adf565b6000610ba3611dcc565b73ffffffffffffffffffffffffffffffffffffffff8181166000818152600860209081526040808320948916808452949091529081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168715151790555192935090917fa8656e308026eeabce8f0bc18048433252318ab80ac79da0b3d3d8697dfba89190610c379086906154c3565b60405180910390a350610c48611b93565b610c50611ba7565b5050565b610c5c61456a565b610c64611931565b15610d2257835160005b8181146108e5578251600090610c8b90879063ffffffff611bd116565b90506000610cc8888481518110610c9e57fe5b602002602001015160a00151898581518110610cb657fe5b60200260200101516080015184612218565b9050610cd261456a565b610cf6898581518110610ce157fe5b6020026020010151838987815181106108ae57fe5b9050610d028682611d31565b955087866000015110610d17575050506108e5565b505050600101610c6e565b610d2a611a6d565b835160005b81811461095c578251600090610d4c90879063ffffffff611bd116565b90506000610d5f888481518110610c9e57fe5b9050610d6961456a565b610d78898581518110610ce157fe5b9050610d848682611d31565b955087866000015110610d995750505061095c565b505050600101610d2f565b600860209081526000928352604080842090915290825290205460ff1681565b600080610dd285858561225a565b90506005816008811115610de257fe5b1480610df957506007816008811115610df757fe5b145b15610e0e57610e0e610a6c60058787876122d9565b610e1a81868686612381565b95945050505050565b600760209081526000928352604080842090915290825290205460ff1681565b60045473ffffffffffffffffffffffffffffffffffffffff1681565b610e676145c1565b610e6f611adf565b610b598585858560006125f1565b610e8561456a565b610e90848484610c54565b9050828160000151101561096657610966610a6c60008584600001516126de565b600080610ec9600154856126fd90919063ffffffff16565b9050610b6b848285612711565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b6060610efc611931565b15610f9f578351604080518281526020808402820101909152818015610f3c57816020015b610f2961456a565b815260200190600190039081610f215790505b50915060005b8181146108e557610f80868281518110610f5857fe5b6020026020010151868381518110610f6c57fe5b60200260200101518684815181106108ae57fe5b838281518110610f8c57fe5b6020908102919091010152600101610f42565b610fa7611a6d565b8351604080518281526020808402820101909152818015610fe257816020015b610fcf61456a565b815260200190600190039081610fc75790505b50915060005b81811461095c57610ffe868281518110610f5857fe5b83828151811061100a57fe5b6020908102919091010152600101610fe8565b61102561184f565b7f3a3e76d7a75e198aef1f53137e4f2a8a2ec74e2e9526db8404d08ccc9f1e621d60035482604051611058929190615542565b60405180910390a1600355565b606061106f611adf565b83516040805182815260208084028201019091528180156110aa57816020015b61109761456a565b81526020019060019003908161108f5790505b50915060005b81811461111a576110fb8682815181106110c657fe5b60200260200101518683815181106110da57fe5b60200260200101518684815181106110ee57fe5b6020026020010151612797565b83828151811061110757fe5b60209081029190910101526001016110b0565b5050611124611b93565b610966611ba7565b61113461456a565b61113c611adf565b611147848484612797565b9050611124611b93565b6111596145f5565b61116282612839565b60408301526020820152608082015161118e578060015b9081600681111561118657fe5b905250610b36565b60a082015161119f57806002611179565b8160a001518160400151106111b657806005611179565b81610100015142106111ca57806004611179565b6020808201516000908152600a909152604090205460ff16156111ef57806006611179565b610120820151825173ffffffffffffffffffffffffffffffffffffffff9081166000908152600b60209081526040808320606088015190941683529290522054111561123d57806006611179565b60038152919050565b60008061125e6001548561286a90919063ffffffff16565b9050610b6b848285612879565b61127361456a565b61127e848484610846565b9050828160200151101561096657610966610a6c60018584602001516126de565b835160005b81811461130f576113078160001b8783815181106112be57fe5b60200260200101518784815181106112d257fe5b60200260200101518785815181106112e657fe5b60200260200101518786815181106112fa57fe5b60200260200101516128ce565b6001016112a4565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134290615913565b60405180910390fd5b6113536145c1565b61135b611adf565b610b598585858560016125f1565b6060611373611adf565b83516040805182815260208084028201019091528180156113ae57816020015b61139b61456a565b8152602001906001900390816113935790505b50915060005b81811461111a576113ff8682815181106113ca57fe5b60200260200101518683815181106113de57fe5b60200260200101518684815181106113f257fe5b6020026020010151612a92565b83828151811061140b57fe5b60209081029190910101526001016113b4565b61142661184f565b61084381611896565b60015481565b61143d61184f565b60008173ffffffffffffffffffffffffffffffffffffffff1663ae25532e6040518163ffffffff1660e01b815260040160206040518083038186803b15801561148557600080fd5b505afa158015611499573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506114bd9190810190614f14565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526002602052604090205490915073ffffffffffffffffffffffffffffffffffffffff16801561151b5761151b610a6c8383612ac5565b7fffffffff0000000000000000000000000000000000000000000000000000000082166000908152600260205260409081902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8616179055517fd2c6b762299c609bdb96520b58a49bfb80186934d4f71a86a367571a15c03194906115bc9084908690615657565b60405180910390a1505050565b600b60209081526000928352604080842090915290825290205481565b7f20c13b0b0000000000000000000000000000000000000000000000000000000081565b611612611adf565b805160005b8181146116425761163a83828151811061162d57fe5b6020026020010151611b4e565b600101611617565b505061083b611b93565b61165461456a565b61165c611adf565b611147848484612a92565b60065473ffffffffffffffffffffffffffffffffffffffff1681565b61168b61184f565b73ffffffffffffffffffffffffffffffffffffffff81166116b6576116b1610a6c612b67565b610843565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6060611730611931565b156117cd57825160408051828152602080840282010190915281801561176a57816020015b60608152602001906001900390816117555790505b50915060005b8181146117c6576117a785828151811061178657fe5b602002602001015185838151811061179a57fe5b6020026020010151611953565b8382815181106117b357fe5b6020908102919091010152600101611770565b50506107f5565b6117d5611a6d565b825160408051828152602080840282010190915281801561180a57816020015b60608152602001906001900390816117f55790505b50915060005b8181146118455761182685828151811061178657fe5b83828151811061183257fe5b6020908102919091010152600101611810565b50506107f5611aaf565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107b1576000546107b190610a6c90339073ffffffffffffffffffffffffffffffffffffffff16612b9e565b6004546040517fe1a5430ebec577336427f40f15822f1f36c5e3509ff209d6db9e6c9e6941cb0b916118e29173ffffffffffffffffffffffffffffffffffffffff90911690849061537b565b60405180910390a1600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000547501000000000000000000000000000000000000000000900460ff1690565b6060600061196c600154856126fd90919063ffffffff16565b9050611979848483612bbb565b60608401516119888180612c8f565b60008281526005602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556080870151905160609130916119d6919061530d565b600060405180830381855af49150503d8060008114611a11576040519150601f19603f3d011682016040523d82523d6000602084013e611a16565b606091505b509150915081611a2d57611a2d610a6c8583612cf2565b611a38836000612c8f565b60405184907fa4a7329f1dd821363067e07d359e347b4af9b1efe4b6cccf13240228af3c800d90600090a29695505050505050565b600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000179055565b600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1690556107b1612d0f565b60005474010000000000000000000000000000000000000000900460ff1615611b0d57611b0d610a6c612d43565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055565b611b566145f5565b611b5f82611151565b9050611b6b8282612d7a565b600381516006811115611b7a57fe5b14611b855750610843565b610c50828260200151612e29565b611b9b611931565b6107b1576107b1612d0f565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b600082821115611bea57611bea610a6c60028585612ed2565b50900390565b611bf861456a565b6040516060907f9b44d5560000000000000000000000000000000000000000000000000000000090611c3290879087908790602401615a61565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050600060603073ffffffffffffffffffffffffffffffffffffffff1683604051611cba919061530d565b600060405180830381855af49150503d8060008114611cf5576040519150601f19603f3d011682016040523d82523d6000602084013e611cfa565b606091505b50915091508115611d2757805160a014611d1057fe5b80806020019051611d249190810190614f30565b93505b5050509392505050565b611d3961456a565b81518351611d4c9163ffffffff612ef116565b815260208083015190840151611d679163ffffffff612ef116565b602082015260408083015190840151611d859163ffffffff612ef116565b604082015260608083015190840151611da39163ffffffff612ef116565b606082015260808083015190840151611dc19163ffffffff612ef116565b608082015292915050565b60065460009073ffffffffffffffffffffffffffffffffffffffff16818115611df55781611df7565b335b9250505090565b6060634ad3127560e01b848484604051602401611e1d939291906153a2565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290509392505050565b805160208201fd5b611eb3614599565b8551611ec657611ec6610a6c6000612f0d565b8451611ed957611ed9610a6c6001612f0d565b8351865114611eef57611eef610a6c6002612f0d565b8251855114611f0557611f05610a6c6003612f0d565b8551604051908082528060200260200182016040528015611f4057816020015b611f2d61456a565b815260200190600190039081611f255790505b5081528451604080518281526020808402820101909152908015611f7e57816020015b611f6b61456a565b815260200190600190039081611f635790505b506020820152600080611f8f614617565b88600081518110611f9c57fe5b60200260200101519050611fae614617565b88600081518110611fbb57fe5b602002602001015190506000611fd083612839565b9150506000611fde83612839565b915050611fe961456a565b611ff161456a565b611ff96145c1565b61202c87878f8c8151811061200a57fe5b60200260200101518f8c8151811061201e57fe5b60200260200101518f6125f1565b80516020015190915061204690869063ffffffff612ef116565b945061206381602001516020015185612ef190919063ffffffff16565b9350612073838260000151611d31565b9250612083828260200151611d31565b91506120a081604001518b60400151612ef190919063ffffffff16565b60408b0152606080820151908b01516120be9163ffffffff612ef116565b60608b015260a08701518510612169578951805160018b019a85929181106120e257fe5b60200260200101819052506040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525092508e5189141561214657818a60200151898151811061213557fe5b602002602001018190525050612207565b8e898151811061215257fe5b6020026020010151965061216587612839565b9550505b8560a00151841061220157818a6020015189806001019a508151811061218b57fe5b60200260200101819052506040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525091508d518814156121de57828a600001518a8151811061213557fe5b8d88815181106121ea57fe5b602002602001015195506121fd86612839565b9450505b50611ff1565b505050505050505095945050505050565b6000610b6b8361224e61223282600163ffffffff611bd116565b612242888763ffffffff612fac16565b9063ffffffff612ef116565b9063ffffffff612fdd16565b6000612267848484613007565b905073ffffffffffffffffffffffffffffffffffffffff831661229457612294610a6c60068686866122d9565b600881818111156122a157fe5b60ff16106122b9576122b9610a6c60038686866122d9565b60008160088111156122c757fe5b141561096657610966610a6c60048686865b6060637e5a231860e01b858585856040516024016122fa94939291906158b8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050949350505050565b6000600185600881111561239157fe5b14156123b85781516001146123b0576123b0610a6c60028686866122d9565b506000610b6b565b60028560088111156123c657fe5b14156124bf5781516042146123e5576123e5610a6c60028686866122d9565b6000826000815181106123f457fe5b016020015160f81c9050600061241184600163ffffffff61304616565b9050600061242685602163ffffffff61304616565b905060006001888585856040516000815260200160405260405161244d949392919061560c565b6020604051602081039080840390855afa15801561246f573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015173ffffffffffffffffffffffffffffffffffffffff8981169116149550610b6b945050505050565b60038560088111156124cd57fe5b141561257a5781516042146124ec576124ec610a6c60028686866122d9565b6000826000815181106124fb57fe5b016020015160f81c9050600061251884600163ffffffff61304616565b9050600061252d85602163ffffffff61304616565b905060006001886040516020016125449190615329565b604051602081830303815290604052805190602001208585856040516000815260200160405260405161244d949392919061560c565b600485600881111561258857fe5b14156125a057612599848484613070565b9050610b6b565b60068560088111156125ae57fe5b146125b557fe5b50600083815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915290205460ff16949350505050565b6125f96145c1565b6101608087015161014080880191909152870151908601526126196145f5565b61262287611151565b905061262c6145f5565b61263587611151565b90506000612641611dcc565b905061264f8984838a613266565b61265b88838389613266565b61266f89898560200151856020015161337e565b6126888989856040015185604001516003543a8b6133c3565b93506126a38982856020015186604001518860000151613518565b6126bc8882846020015185604001518860200151613518565b6126d2836020015183602001518b8b85896135f6565b50505095945050505050565b60606318e4b14160e01b848484604051602401611e1d9392919061589d565b60006109668261270c8561379d565b613825565b60608301516000908161272585838661225a565b9050600581600881111561273557fe5b141561275757612750612748878761385f565b868487613897565b925061278e565b600781600881111561276557fe5b141561277f57612750612778878761385f565b838661394b565b61278b81868487612381565b92505b50509392505050565b61279f61456a565b6127a76145f5565b6127b085611151565b905060006127bc611dcc565b90506127ca86838387613266565b60006127e783604001518860a00151611bd190919063ffffffff16565b905060006127f5878361395a565b905061280588826003543a613970565b945060008460200151905061282189858388604001518a613518565b61282d818a86896139e7565b50505050509392505050565b6000806128516001548461286a90919063ffffffff16565b6000818152600960205260409020549092509050915091565b60006109668261270c85613a7e565b82516000908161288a85838661225a565b9050600581600881111561289a57fe5b14156128ad576127506127488787613b55565b60078160088111156128bb57fe5b141561277f576127506127788787613b55565b8015612a8b5760208451816128df57fe5b066004146128f6576128f6610a6c60008787613b8d565b6000612908858263ffffffff613bac16565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526002602052604090205490915073ffffffffffffffffffffffffffffffffffffffff168061296757612967610a6c60018989613b8d565b6040516060907fa85e59e400000000000000000000000000000000000000000000000000000000906129a39089908990899089906024016156b2565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050600060608373ffffffffffffffffffffffffffffffffffffffff1683604051612a2b919061530d565b6000604051808303816000865af19150503d8060008114612a68576040519150601f19603f3d011682016040523d82523d6000602084013e612a6d565b606091505b509150915081612a8557612a85610a6c8b8b84613bf8565b50505050505b5050505050565b612a9a61456a565b612aa5848484612797565b90508281602001511461096657610966610a6c60028584602001516126de565b60606311c7b72060e01b8383604051602401612ae2929190615657565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905092915050565b60408051808201909152600481527fe69edc3e00000000000000000000000000000000000000000000000000000000602082015290565b6060631de45ad160e01b8383604051602401612ae292919061537b565b82602001514210612bd457612bd4610a6c600183613c17565b60408301513a8114612bee57612bee610a6c833a84613c34565b60065473ffffffffffffffffffffffffffffffffffffffff168015612c1a57612c1a610a6c8483613c53565b60008381526005602052604090205460ff1615612c3f57612c3f610a6c600085613c17565b606085015173ffffffffffffffffffffffffffffffffffffffff81163314801590612c725750612c70868587612711565b155b15612c8757612c87610a6c60018684896122d9565b505050505050565b73ffffffffffffffffffffffffffffffffffffffff82163314610c50576006805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff00000000000000000000000000000000000000009091161790555050565b60606320d11f6160e01b8383604051602401612ae2929190615550565b47801561084357604051339082156108fc029083906000818181858888f19350505050158015610c50573d6000803e3d6000fd5b60408051808201909152600481527f0c3b823f00000000000000000000000000000000000000000000000000000000602082015290565b606082015173ffffffffffffffffffffffffffffffffffffffff1615612dce57606082015173ffffffffffffffffffffffffffffffffffffffff163314612dce57612dce610a6c6002836020015133613c70565b6000612dd8611dcc565b90508073ffffffffffffffffffffffffffffffffffffffff16836000015173ffffffffffffffffffffffffffffffffffffffff1614612e2457612e24610a6c6000846020015184613c70565b505050565b6000818152600a60205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558281015183516101408501516101608601519351859473ffffffffffffffffffffffffffffffffffffffff9485169493909316927f02c310a9a43963ff31a754a4099cc435ed498049687539d72d7818d9b093415c92612ec692909190339061571a565b60405180910390a45050565b606063e946c1bb60e01b848484604051602401611e1d93929190615845565b60008282018381101561096657610966610a6c60008686612ed2565b606063d4092f4f60e01b82604051602401612f289190615832565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050919050565b600082612fbb575060006107f5565b82820282848281612fc857fe5b041461096657610966610a6c60018686612ed2565b600081612ff357612ff3610a6c60038585612ed2565b6000828481612ffe57fe5b04949350505050565b600081516000141561302357613023610a6c60028686866122d9565b8160018351038151811061303357fe5b016020015160f81c6008811115610b6b57fe5b6000816020018351101561306757613067610a6c6005855185602001613c8f565b50016020015190565b80516000906130a7837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830163ffffffff613cae16565b6040516060907f1626ba7e00000000000000000000000000000000000000000000000000000000906130df9088908790602401615550565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905061316e848363ffffffff613cae16565b600060608673ffffffffffffffffffffffffffffffffffffffff1683604051613197919061530d565b600060405180830381855afa9150503d80600081146131d2576040519150601f19603f3d011682016040523d82523d6000602084013e6131d7565b606091505b50915091508180156131ea575080516020145b1561324c577fb06713810000000000000000000000000000000000000000000000000000000061322182600063ffffffff613bac16565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614945050505050610966565b61325b610a6c89898985613cb2565b505050509392505050565b60038351600681111561327557fe5b1461328f5761328f610a6c84602001518560000151613cd3565b606084015173ffffffffffffffffffffffffffffffffffffffff16156132e357606084015173ffffffffffffffffffffffffffffffffffffffff1633146132e3576132e3610a6c6002856020015133613c70565b602084015173ffffffffffffffffffffffffffffffffffffffff161561334d578173ffffffffffffffffffffffffffffffffffffffff16846020015173ffffffffffffffffffffffffffffffffffffffff161461334d5761334d610a6c6001856020015185613c70565b61335c84846020015183612879565b61337857613378610a6c600085602001518760000151856122d9565b50505050565b60a080840151908501516133979163ffffffff612fac16565b608080850151908601516133b09163ffffffff612fac16565b101561337857613378610a6c8383613cf0565b6133cb6145c1565b60a08801516000906133e3908863ffffffff611bd116565b905060006133fa8a608001518b60a0015184613d0d565b90506000613415888b60a00151611bd190919063ffffffff16565b9050600061342c8b608001518c60a0015184613d0d565b90508515613449576134428c8c85878587613d41565b945061345a565b6134578c8c85878587613e13565b94505b84515160808d015160c08e0151613472929190613d0d565b85516040015284516020015160a08d015160e08e0151613493929190613d0d565b85516060015260208501515160808c015160c08d01516134b4929190613d0d565b856020015160400181815250506134dc8560200151602001518c60a001518d60e00151613d0d565b60208601516060015260006134f7888a63ffffffff612fac16565b86516080908101829052602088015101525050505050979650505050505050565b602081015161352e90839063ffffffff612ef116565b600960008581526020019081526020016000208190555082856040015173ffffffffffffffffffffffffffffffffffffffff16866000015173ffffffffffffffffffffffffffffffffffffffff167f6869791f0a34781b29882982cc39e882768cf2c96995c2a110c577c53bc932d58861014001518961016001518a61018001518b6101a001518b338a600001518b602001518c604001518d606001518e608001516040516135e79b9a99989796959493929190615766565b60405180910390a45050505050565b835183516040808701519086015161014087015185516020015161361f918b91869088906128ce565b6136398a89610140015186868960200151602001516128ce565b6136538988610180015185848960200151604001516128ce565b61366d8a89610180015186858960000151604001516128ce565b6136838a896101400151868989604001516128ce565b61369989886101400151858989606001516128ce565b60006136b18b8b88600001516080015188888c613eac565b9050806136ce578551600060809182018190526020880151909101525b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561371e57506101a080890151908a015161371e9163ffffffff613f0816565b1561375c576137578b8a6101a0015189866137528b60200151606001518c6000015160600151612ef190919063ffffffff16565b6128ce565b613790565b6137768a896101a0015189858a60200151606001516128ce565b6137908b8a6101a0015189868a60000151606001516128ce565b5050505050505050505050565b608081810151825160208085015160408087015160609788015186519685019690962082517fec69816980a3a3ca4554410e60253953e9ff375ba4536a98adfa15cc71541508815294850195909552908301919091529481019490945273ffffffffffffffffffffffffffffffffffffffff9091169183019190915260a082015260c0902090565b6040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6040516060907fde047db40000000000000000000000000000000000000000000000000000000090612ae29085908590602401615a8c565b805160009060158110156138b5576138b5610a6c60028787876122d9565b60006138e9847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb840163ffffffff613f2d16565b73ffffffffffffffffffffffffffffffffffffffff80871660009081526008602090815260408083209385168352929052205490915060ff1661393357613933610a6c8683613f6d565b6139408188866015613f8a565b979650505050505050565b6000610b6b8385846001613f8a565b60008183106139695781610966565b5090919050565b61397861456a565b6020810184905260a08501516080860151613994918691613d0d565b815260a085015160c08601516139ab918691613d0d565b604082015260a085015160e08601516139c5918691613d0d565b60608201526139da828463ffffffff612fac16565b6080820152949350505050565b613a018484610160015184866000015185602001516128ce565b613a1b8484610140015185600001518585600001516128ce565b613a3584846101a0015184866040015185606001516128ce565b613a53848461018001518560000151866040015185604001516128ce565b6000613a69858360800151866000015186614161565b905080612a8b57600060808301525050505050565b6101408101516101608201516101808301516101a08401516000937ff80322eb8376aafb64eadf8f0d7623f22130fd9491a221e902b713cb984a753493909290916020871015613aca57fe5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe087018051610140890180516101608b0180516101808d0180516101a08f0180519d89528c5160209d8e012087528b519b8d019b909b2084528951998c01999099208152875197909a019690962088526101e085209390945290529190529252919091529050919050565b6040516060907f3efe50c80000000000000000000000000000000000000000000000000000000090612ae29085908590602401615a3f565b606063488219a660e01b848484604051602401611e1d9392919061580a565b60008160040183511015613bcd57613bcd610a6c6003855185600401613c8f565b5001602001517fffffffff000000000000000000000000000000000000000000000000000000001690565b6060634678472b60e01b848484604051602401611e1d93929190615569565b606063f598518460e01b8383604051602401612ae29291906158fc565b606063a26dac0960e01b848484604051602401611e1d939291906155f6565b606063dec4aedf60e01b8383604051602401612ae29291906154d7565b606063e53c76c860e01b848484604051602401611e1d93929190615866565b6060632800659560e01b848484604051602401611e1d939291906158aa565b9052565b6060631b8388f760e01b858585856040516024016122fa94939291906154fb565b606063fdb6ca8d60e01b8383604051602401612ae2929190615594565b606063b6555d6f60e01b8383604051602401612ae2929190615542565b6000613d1a8484846141a6565b15613d2d57613d2d610a6c85858561420c565b610b6b8361224e868563ffffffff612fac16565b613d496145c1565b81851184841184861115613d6957613d6289868661422b565b9250613db8565b86841115613da95782518790528251602001869052608088015160a0890151613d93919089613d0d565b6020808501805192909252905101879052613db8565b613db587878787614268565b92505b8115613dde576020808401510151835151613dd89163ffffffff611bd116565b60408401525b8015613e065782516020908101519084015151613e009163ffffffff611bd116565b60608401525b50505b9695505050505050565b613e1b6145c1565b82841115613e3557613e2e87848461422b565b9050613e83565b82841015613e745780518590528051602090810185905281015184905260a08601516080870151613e67919086614293565b6020808301510152613e83565b613e8085858585614268565b90505b6020808201510151815151613e9d9163ffffffff611bd116565b60408201529695505050505050565b60045460009073ffffffffffffffffffffffffffffffffffffffff168015613efe57476000613edf8a84848b8b8a6142cb565b9050613ef189848385038b8a8a6142cb565b5060019350505050613e09565b6000915050613e09565b6000815183511480156109665750508051602091820120825192909101919091201490565b60008160140183511015613f4e57613f4e610a6c6004855185601401613c8f565b50016014015173ffffffffffffffffffffffffffffffffffffffff1690565b606063a15c0d0660e01b8383604051602401612ae292919061537b565b8151600090613fa18484830363ffffffff613cae16565b6040516060907f20c13b0b0000000000000000000000000000000000000000000000000000000090613fd990889088906024016156f5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050614068858363ffffffff613cae16565b600060608873ffffffffffffffffffffffffffffffffffffffff1683604051614091919061530d565b600060405180830381855afa9150503d80600081146140cc576040519150601f19603f3d011682016040523d82523d6000602084013e6140d1565b606091505b50915091508180156140e4575080516020145b15614146577f20c13b0b0000000000000000000000000000000000000000000000000000000061411b82600063ffffffff613bac16565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614945050505050610b6b565b614155610a6c8a8a8a85614403565b50505050949350505050565b60045460009073ffffffffffffffffffffffffffffffffffffffff16801561419c576141918682478888886142cb565b506001915050610b6b565b6000915050610b6b565b6000826141b8576141b8610a6c614424565b8115806141c3575083155b156141d057506000610966565b600083806141da57fe5b85840990506141ef858463ffffffff612fac16565b614201826103e863ffffffff612fac16565b101595945050505050565b606063339f3de260e01b848484604051602401611e1d939291906155f6565b6142336145c1565b60208082018051859052518101839052815101839052608084015160a085015161425e919085613d0d565b8151529392505050565b6142706145c1565b805194909452835160209081019390935282840180519290925290519091015290565b60006142a084848461445b565b156142b3576142b3610a6c85858561420c565b610b6b8361224e61223282600163ffffffff611bd116565b60008385106142d75750825b6040516060907fa3b4a3270000000000000000000000000000000000000000000000000000000090614311908690869089906024016153a2565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050600060608873ffffffffffffffffffffffffffffffffffffffff16848460405161439a919061530d565b60006040518083038185875af1925050503d80600081146143d7576040519150601f19603f3d011682016040523d82523d6000602084013e6143dc565b606091505b5091509150816143f6576143f6610a6c8b898989866144bf565b5050509695505050505050565b6060635bd0428d60e01b858585856040516024016122fa94939291906153d3565b60408051808201909152600481527fa791837c00000000000000000000000000000000000000000000000000000000602082015290565b60008261446d5761446d610a6c614424565b811580614478575083155b1561448557506000610966565b6000838061448f57fe5b8584099050836144a5818363ffffffff611bd116565b816144ac57fe5b0690506141ef858463ffffffff612fac16565b60606387cb1e7560e01b86868686866040516024016144e29594939291906155b1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905095945050505050565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6040518060800160405280606081526020016060815260200160008152602001600081525090565b60405180608001604052806145d461456a565b81526020016145e161456a565b815260200160008152602001600081525090565b6040805160608101909152806000815260006020820181905260409091015290565b604051806101c00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001606081525090565b803573ffffffffffffffffffffffffffffffffffffffff811681146107f557600080fd5b600082601f830112614712578081fd5b813561472561472082615b1d565b615af6565b81815291506020808301908481018184028601820187101561474657600080fd5b60005b8481101561476d5761475b88836146de565b84529282019290820190600101614749565b505050505092915050565b600082601f830112614788578081fd5b813561479661472082615b1d565b8181529150602080830190840160005b838110156147d3576147be8760208435890101614896565b835260209283019291909101906001016147a6565b5050505092915050565b600082601f8301126147ed578081fd5b81356147fb61472082615b1d565b8181529150602080830190840160005b838110156147d357614823876020843589010161491d565b8352602092830192919091019060010161480b565b600082601f830112614848578081fd5b813561485661472082615b1d565b81815291506020808301908481018184028601820187101561487757600080fd5b60005b8481101561476d5781358452928201929082019060010161487a565b600082601f8301126148a6578081fd5b813567ffffffffffffffff8111156148bc578182fd5b6148ed60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615af6565b915080825283602082850101111561490457600080fd5b8060208401602084013760009082016020015292915050565b60006101c0808385031215614930578182fd5b61493981615af6565b91505061494683836146de565b815261495583602084016146de565b602082015261496783604084016146de565b604082015261497983606084016146de565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e08201526101008083013581830152506101208083013581830152506101408083013567ffffffffffffffff808211156149db57600080fd5b6149e786838701614896565b83850152610160925082850135915080821115614a0357600080fd5b614a0f86838701614896565b83850152610180925082850135915080821115614a2b57600080fd5b614a3786838701614896565b838501526101a0925082850135915080821115614a5357600080fd5b50614a6085828601614896565b82840152505092915050565b600060a08284031215614a7d578081fd5b614a8760a0615af6565b90508135815260208201356020820152604082013560408201526060820135614aaf81615b91565b6060820152608082013567ffffffffffffffff811115614ace57600080fd5b614ada84828501614896565b60808301525092915050565b600060208284031215614af7578081fd5b61096683836146de565b60008060408385031215614b13578081fd5b614b1d84846146de565b9150614b2c84602085016146de565b90509250929050565b60008060408385031215614b47578182fd5b614b5184846146de565b915060208301358015158114614b65578182fd5b809150509250929050565b60008060008060808587031215614b85578182fd5b843567ffffffffffffffff80821115614b9c578384fd5b614ba888838901614778565b95506020870135915080821115614bbd578384fd5b614bc988838901614702565b94506040870135915080821115614bde578384fd5b614bea88838901614702565b93506060870135915080821115614bff578283fd5b50614c0c87828801614838565b91505092959194509250565b600060208284031215614c29578081fd5b813567ffffffffffffffff811115614c3f578182fd5b610b6b848285016147dd565b60008060008060808587031215614c60578182fd5b843567ffffffffffffffff80821115614c77578384fd5b614c83888389016147dd565b95506020870135915080821115614c98578384fd5b614ca4888389016147dd565b94506040870135915080821115614cb9578384fd5b614cc588838901614778565b93506060870135915080821115614cda578283fd5b50614c0c87828801614778565b600080600060608486031215614cfb578081fd5b833567ffffffffffffffff80821115614d12578283fd5b614d1e878388016147dd565b94506020860135915080821115614d33578283fd5b614d3f87838801614838565b93506040860135915080821115614d54578283fd5b50614d6186828701614778565b9150509250925092565b600080600060608486031215614d7f578081fd5b833567ffffffffffffffff80821115614d96578283fd5b614da2878388016147dd565b9450602086013593506040860135915080821115614d54578283fd5b60008060408385031215614dd0578182fd5b823567ffffffffffffffff80821115614de7578384fd5b81850186601f820112614df8578485fd5b80359250614e0861472084615b1d565b83815260208082019190838101885b87811015614e4057614e2e8c848435890101614a6c565b85529382019390820190600101614e17565b50919750880135945050505080821115614e58578283fd5b50614e6585828601614778565b9150509250929050565b600060208284031215614e80578081fd5b5035919050565b60008060408385031215614e99578182fd5b823591506020830135614b6581615b91565b600080600060608486031215614ebf578081fd5b833592506020840135614ed181615b91565b9150604084013567ffffffffffffffff811115614eec578182fd5b614d6186828701614896565b600060208284031215614f09578081fd5b813561096681615bb3565b600060208284031215614f25578081fd5b815161096681615bb3565b600060a08284031215614f41578081fd5b614f4b60a0615af6565b82518152602083015160208201526040830151604082015260608301516060820152608083015160808201528091505092915050565b600060208284031215614f92578081fd5b813567ffffffffffffffff811115614fa8578182fd5b610b6b8482850161491d565b60008060408385031215614fc6578182fd5b823567ffffffffffffffff80821115614fdd578384fd5b614fe98683870161491d565b93506020850135915080821115614ffe578283fd5b50614e6585828601614896565b60008060008060808587031215615020578182fd5b843567ffffffffffffffff80821115615037578384fd5b6150438883890161491d565b95506020870135915080821115615058578384fd5b6150648883890161491d565b94506040870135915080821115615079578384fd5b61508588838901614896565b9350606087013591508082111561509a578283fd5b50614c0c87828801614896565b6000806000606084860312156150bb578081fd5b833567ffffffffffffffff808211156150d2578283fd5b6150de8783880161491d565b94506020860135935060408601359150808211156150fa578283fd5b50614d6186828701614896565b60008060408385031215615119578182fd5b823567ffffffffffffffff80821115615130578384fd5b614fe986838701614a6c565b73ffffffffffffffffffffffffffffffffffffffff169052565b6000815180845260208401935060208301825b828110156151925761517c8683516151e6565b60a0959095019460209190910190600101615169565b5093949350505050565b600081518084526151b4816020860160208601615b3d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b80518252602081015160208301526040810151604083015260608101516060830152608081015160808301525050565b60006101c061522684845161513c565b6020830151615238602086018261513c565b50604083015161524b604086018261513c565b50606083015161525e606086018261513c565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e08501526101008084015181860152506101208084015181860152506101408084015182828701526152b78387018261519c565b915050610160915081840151858203838701526152d4828261519c565b9250505061018080840151858303828701526152f0838261519c565b9150506101a091508184015185820383870152613e09828261519c565b6000825161531f818460208701615b3d565b9190910192915050565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b600073ffffffffffffffffffffffffffffffffffffffff8616825260806020830152615402608083018661519c565b8281036040840152615414818661519c565b8381036060850152615426818661519c565b98975050505050505050565b6000602080830181845280855180835260408601915060408482028701019250838701855b828110156154a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261549185835161519c565b94509285019290850190600101615457565b5092979650505050505050565b6000602082526109666020830184615156565b901515815260200190565b90815260200190565b91825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b600085825273ffffffffffffffffffffffffffffffffffffffff8516602083015260806040830152615530608083018561519c565b8281036060840152613940818561519c565b918252602082015260400190565b600083825260406020830152610b6b604083018461519c565b600084825260606020830152615582606083018561519c565b8281036040840152613e09818561519c565b828152604081016155a483615b87565b8260208301529392505050565b600086825285602083015273ffffffffffffffffffffffffffffffffffffffff808616604084015280851660608401525060a0608083015261394060a083018461519c565b9283526020830191909152604082015260600190565b93845260ff9290921660208401526040830152606082015260800190565b7fffffffff0000000000000000000000000000000000000000000000000000000091909116815260200190565b7fffffffff0000000000000000000000000000000000000000000000000000000092909216825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b600060208252610966602083018461519c565b6000608082526156c5608083018761519c565b73ffffffffffffffffffffffffffffffffffffffff95861660208401529390941660408201526060015292915050565b600060408252615708604083018561519c565b8281036020840152610e1a818561519c565b60006060825261572d606083018661519c565b828103602084015261573f818661519c565b91505073ffffffffffffffffffffffffffffffffffffffff83166040830152949350505050565b600061016080835261577a8184018f61519c565b838103602085015261578c818f61519c565b91505082810360408401526157a1818d61519c565b83810360608501526157b3818d61519c565b73ffffffffffffffffffffffffffffffffffffffff9b8c16608086015299909a1660a0840152505060c081019590955260e08501939093526101008401919091526101208301526101409091015295945050505050565b600061581585615b69565b84825283602083015260606040830152610e1a606083018461519c565b6020810161583f83615b73565b91905290565b6060810161585285615b73565b938152602081019290925260409091015290565b6060810161587385615b7d565b938152602081019290925273ffffffffffffffffffffffffffffffffffffffff1660409091015290565b6060810161585285615b7d565b606081016008851061585257fe5b60006158c386615b87565b85825284602083015273ffffffffffffffffffffffffffffffffffffffff8416604083015260806060830152613e09608083018461519c565b6040810161590984615b69565b9281526020015290565b60208082526014908201527f5452414e53464552535f5355434345535346554c000000000000000000000000604082015260600190565b60006020825282516080602084015261596660a0840182615156565b602085015191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08482030160408501526159a18183615156565b604086015160608601526060860151608086015280935050505092915050565b60a081016107f582846151e6565b6000610180820190506159e38284516151e6565b60208301516159f560a08401826151e6565b5060408301516101408301526060909201516101609091015290565b81516060820190615a2181615b87565b80835250602083015160208301526040830151604083015292915050565b600060408252615a526040830185615216565b90508260208301529392505050565b600060608252615a746060830186615216565b8460208401528281036040840152613e09818561519c565b60006040825283516040830152602084015160608301526040840151608083015273ffffffffffffffffffffffffffffffffffffffff60608501511660a0830152608084015160a060c0840152615ae660e084018261519c565b9150508260208301529392505050565b60405181810167ffffffffffffffff81118282101715615b1557600080fd5b604052919050565b600067ffffffffffffffff821115615b33578081fd5b5060209081020190565b60005b83811015615b58578181015183820152602001615b40565b838111156133785750506000910152565b6002811061084357fe5b6004811061084357fe5b6003811061084357fe5b6007811061084357fe5b73ffffffffffffffffffffffffffffffffffffffff8116811461084357600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008116811461084357600080fd5b8351602094850120835193850193909320604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f815295860194909452928401929092526060830152608082015260a090209056fea365627a7a72315820897f450a05992000843ffc258f91408c60af4df0c5e254daaee4892d72aa3da26c6578706572696d656e74616cf564736f6c63430005100040" }, "deployedBytecode": { - "object": "0x6080604052600436106102d15760003560e01c80638da5cb5b11610179578063beee2e14116100d6578063dd885e2d1161008a578063eea086ba11610064578063eea086ba14610715578063f2fde38b1461072a578063fc74896d1461074a576102d1565b8063dd885e2d146106cd578063dedfc1f1146106ef578063e14b58c414610702576102d1565b8063c26cfecd116100bb578063c26cfecd14610678578063c585bb931461068d578063d9bfa73e146106ad576102d1565b8063beee2e1414610645578063c0fa16cc14610658576102d1565b80639d3fa4b91161012d578063a6c3bf3311610112578063a6c3bf33146105ff578063b04fbddd14610612578063b718e29214610632576102d1565b80639d3fa4b9146105b2578063a12dcc6f146105df576102d1565b80639331c7421161015e5780639331c7421461056c5780639694a4021461058c5780639b44d5561461059f576102d1565b80638da5cb5b146105375780638ea8dfe41461054c576102d1565b80636a1a80fd116102325780638171c407116101e657806388ec79fb116101c057806388ec79fb146104e45780638bc8efb3146105045780638d45cd2314610517576102d1565b80638171c4071461048f57806382c174d0146104af578063850a1501146104cf576102d1565b806377fcce681161021757806377fcce681461044957806378d29ac11461045c5780637b8e35141461046f576102d1565b80636a1a80fd146104165780636fcf3e9e14610436576102d1565b80632da629871161028957806346c02d7a1161026e57806346c02d7a146103c35780634f9559b1146103d657806360704108146103e9576102d1565b80632da629871461038e578063369da099146103a3576102d1565b80632280c910116102ba5780632280c9101461032e578063288cdc911461034e5780632ac126221461036e576102d1565b80630228e168146102d65780631ce4c78b1461030c575b600080fd5b3480156102e257600080fd5b506102f66102f1366004614e64565b61076a565b60405161030391906154c4565b60405180910390f35b34801561031857600080fd5b5061032161077f565b60405161030391906154cf565b61034161033c366004615108565b610785565b60405161030391906156a0565b34801561035a57600080fd5b50610321610369366004614e64565b6107c7565b34801561037a57600080fd5b506102f6610389366004614e64565b6107d9565b6103a161039c366004614f82565b6107ee565b005b6103b66103b1366004614d60565b610812565b60405161030391906159c2565b6103a16103d1366004614e64565b610939565b6103a16103e4366004614e64565b6109ac565b3480156103f557600080fd5b50610409610404366004614eed565b610ab9565b604051610303919061535b565b610429610424366004614c40565b610b07565b604051610303919061594b565b610429610444366004614c40565b610b3f565b6103a1610457366004614b2a565b610b5d565b6103b661046a366004614d60565b610c20565b34801561047b57600080fd5b506102f661048a366004614af6565b610d70565b34801561049b57600080fd5b506102f66104aa366004614ea0565b610d90565b3480156104bb57600080fd5b506102f66104ca366004614e7c565b610def565b3480156104db57600080fd5b50610409610e0f565b6104f76104f236600461500c565b610e2b565b60405161030391906159d0565b6103b6610512366004614d60565b610e49565b34801561052357600080fd5b506102f6610532366004615108565b610e7d565b34801561054357600080fd5b50610409610ea2565b61055f61055a366004614cdc565b610ebe565b60405161030391906154b1565b34801561057857600080fd5b506103a1610587366004614e64565b610fe9565b61055f61059a366004614cdc565b611031565b6103b66105ad3660046150a8565b6110f8565b3480156105be57600080fd5b506105d26105cd366004614f82565b61111d565b6040516103039190615a12565b3480156105eb57600080fd5b506102f66105fa366004614fb5565b611201565b6103b661060d366004614d60565b611226565b34801561061e57600080fd5b506103a161062d366004614b65565b61125a565b6104f761064036600461500c565b611306565b61055f610653366004614cdc565b611324565b34801561066457600080fd5b506103a1610673366004614adb565b6113d9565b34801561068457600080fd5b5061032161147c565b34801561069957600080fd5b506103a16106a8366004614adb565b611482565b3480156106b957600080fd5b506103216106c8366004614af6565b611616565b3480156106d957600080fd5b506106e2611633565b604051610303919061562b565b6103a16106fd366004614c0d565b611657565b6103b66107103660046150a8565b611699565b34801561072157600080fd5b506104096116b4565b34801561073657600080fd5b506103a1610745366004614adb565b6116d0565b61075d610758366004614db3565b611748565b6040516103039190615433565b60056020526000908152604090205460ff1681565b60035481565b606061078f61187b565b156107a55761079e838361189d565b90506107c1565b6107ad6119b7565b6107b7838361189d565b90506107c16119f9565b92915050565b60096020526000908152604090205481565b600a6020526000908152604090205460ff1681565b6107f6611a2b565b6107ff81611a9a565b610807611ad7565b61080f611aeb565b50565b61081a614561565b61082261187b565b156108b857835160005b8181146108b157600061084c846020015187611b1590919063ffffffff16565b9050610856614561565b61088788848151811061086557fe5b60200260200101518388868151811061087a57fe5b6020026020010151611b34565b90506108938582611c75565b9450868560200151106108a75750506108b1565b505060010161082c565b5050610932565b6108c06119b7565b835160005b8181146109285760006108e5846020015187611b1590919063ffffffff16565b90506108ef614561565b6108fe88848151811061086557fe5b905061090a8582611c75565b94508685602001511061091e575050610928565b50506001016108c5565b50506109326119f9565b9392505050565b610941611a2b565b600061094b611d10565b600083815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff90941683529290522080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905550610807611ad7565b6109b4611a2b565b60006109be611d10565b9050600073ffffffffffffffffffffffffffffffffffffffff821633146109e557336109e8565b60005b73ffffffffffffffffffffffffffffffffffffffff8084166000908152600b60209081526040808320938516835292905220549091506001840190808211610a3d57610a3d610a38858584611d42565b611de7565b73ffffffffffffffffffffffffffffffffffffffff8085166000818152600b602090815260408083209488168084529490915290819020859055517f82af639571738f4ebd4268fb0363d8957ebe1bbb9e78dba5ebd69eed39b154f090610aa59086906154cf565b60405180910390a350505050610807611ad7565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526002602052604090205473ffffffffffffffffffffffffffffffffffffffff165b919050565b610b0f614590565b610b17611a2b565b610b25858585856001611def565b9050610b2f611ad7565b610b37611aeb565b949350505050565b610b47614590565b610b4f611a2b565b610b25858585856000611def565b610b65611a2b565b6000610b6f611d10565b73ffffffffffffffffffffffffffffffffffffffff8181166000818152600860209081526040808320948916808452949091529081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168715151790555192935090917fa8656e308026eeabce8f0bc18048433252318ab80ac79da0b3d3d8697dfba89190610c039086906154c4565b60405180910390a350610c14611ad7565b610c1c611aeb565b5050565b610c28614561565b610c3061187b565b15610cee57835160005b8181146108b1578251600090610c5790879063ffffffff611b1516565b90506000610c94888481518110610c6a57fe5b602002602001015160a00151898581518110610c8257fe5b6020026020010151608001518461215c565b9050610c9e614561565b610cc2898581518110610cad57fe5b60200260200101518389878151811061087a57fe5b9050610cce8682611c75565b955087866000015110610ce3575050506108b1565b505050600101610c3a565b610cf66119b7565b835160005b818114610928578251600090610d1890879063ffffffff611b1516565b90506000610d2b888481518110610c6a57fe5b9050610d35614561565b610d44898581518110610cad57fe5b9050610d508682611c75565b955087866000015110610d6557505050610928565b505050600101610cfb565b600860209081526000928352604080842090915290825290205460ff1681565b600080610d9e85858561217e565b90506005816008811115610dae57fe5b1480610dc557506007816008811115610dc357fe5b145b15610dda57610dda610a3860058787876121fd565b610de6818686866122a5565b95945050505050565b600760209081526000928352604080842090915290825290205460ff1681565b60045473ffffffffffffffffffffffffffffffffffffffff1681565b610e336145b8565b610e3b611a2b565b610b25858585856000612515565b610e51614561565b610e5c848484610c20565b9050828160000151101561093257610932610a386000858460000151612602565b600080610e956001548561262190919063ffffffff16565b9050610b37848285612635565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b6060610ec861187b565b15610f6b578351604080518281526020808402820101909152818015610f0857816020015b610ef5614561565b815260200190600190039081610eed5790505b50915060005b8181146108b157610f4c868281518110610f2457fe5b6020026020010151868381518110610f3857fe5b602002602001015186848151811061087a57fe5b838281518110610f5857fe5b6020908102919091010152600101610f0e565b610f736119b7565b8351604080518281526020808402820101909152818015610fae57816020015b610f9b614561565b815260200190600190039081610f935790505b50915060005b81811461092857610fca868281518110610f2457fe5b838281518110610fd657fe5b6020908102919091010152600101610fb4565b610ff16126bb565b7f3a3e76d7a75e198aef1f53137e4f2a8a2ec74e2e9526db8404d08ccc9f1e621d60035482604051611024929190615543565b60405180910390a1600355565b606061103b611a2b565b835160408051828152602080840282010190915281801561107657816020015b611063614561565b81526020019060019003908161105b5790505b50915060005b8181146110e6576110c786828151811061109257fe5b60200260200101518683815181106110a657fe5b60200260200101518684815181106110ba57fe5b6020026020010151612702565b8382815181106110d357fe5b602090810291909101015260010161107c565b50506110f0611ad7565b610932611aeb565b611100614561565b611108611a2b565b611113848484612702565b90506110f0611ad7565b6111256145ec565b61112e826127a4565b60408301526020820152608082015161114e5760015b60ff168152610b02565b60a082015161115e576002611144565b8160a00151816040015110611174576005611144565b8161010001514210611187576004611144565b6020808201516000908152600a909152604090205460ff16156111ab576006611144565b610120820151825173ffffffffffffffffffffffffffffffffffffffff9081166000908152600b6020908152604080832060608801519094168352929052205411156111f8576006611144565b60038152919050565b600080611219600154856127d590919063ffffffff16565b9050610b378482856127e4565b61122e614561565b611239848484610812565b9050828160200151101561093257610932610a386001858460200151612602565b835160005b8181146112ca576112c28160001b87838151811061127957fe5b602002602001015187848151811061128d57fe5b60200260200101518785815181106112a157fe5b60200260200101518786815181106112b557fe5b6020026020010151612839565b60010161125f565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fd90615914565b60405180910390fd5b61130e6145b8565b611316611a2b565b610b25858585856001612515565b606061132e611a2b565b835160408051828152602080840282010190915281801561136957816020015b611356614561565b81526020019060019003908161134e5790505b50915060005b8181146110e6576113ba86828151811061138557fe5b602002602001015186838151811061139957fe5b60200260200101518684815181106113ad57fe5b60200260200101516129f3565b8382815181106113c657fe5b602090810291909101015260010161136f565b6113e16126bb565b6004546040517fe1a5430ebec577336427f40f15822f1f36c5e3509ff209d6db9e6c9e6941cb0b9161142d9173ffffffffffffffffffffffffffffffffffffffff90911690849061537c565b60405180910390a1600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60015481565b61148a6126bb565b60008173ffffffffffffffffffffffffffffffffffffffff1663ae25532e6040518163ffffffff1660e01b815260040160206040518083038186803b1580156114d257600080fd5b505afa1580156114e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061150a9190810190614f09565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526002602052604090205490915073ffffffffffffffffffffffffffffffffffffffff16801561156857611568610a388383612a26565b7fffffffff0000000000000000000000000000000000000000000000000000000082166000908152600260205260409081902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8616179055517fd2c6b762299c609bdb96520b58a49bfb80186934d4f71a86a367571a15c03194906116099084908690615658565b60405180910390a1505050565b600b60209081526000928352604080842090915290825290205481565b7f20c13b0b0000000000000000000000000000000000000000000000000000000081565b61165f611a2b565b805160005b81811461168f5761168783828151811061167a57fe5b6020026020010151611a9a565b600101611664565b5050610807611ad7565b6116a1614561565b6116a9611a2b565b6111138484846129f3565b60065473ffffffffffffffffffffffffffffffffffffffff1681565b6116d86126bb565b73ffffffffffffffffffffffffffffffffffffffff8116611703576116fe610a38612ac8565b61080f565b6000805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff000000000000000000000000000000000000000090911617905550565b606061175261187b565b156117f457825160408051828152602080840282010190915260609082801561178f57816020015b606081526020019060019003908161177a5790505b50905060005b8281146117eb576117cc8682815181106117ab57fe5b60200260200101518683815181106117bf57fe5b602002602001015161189d565b8282815181106117d857fe5b6020908102919091010152600101611795565b509150506107c1565b6117fc6119b7565b825160408051828152602080840282010190915260609082801561183457816020015b606081526020019060019003908161181f5790505b50905060005b82811461186f576118508682815181106117ab57fe5b82828151811061185c57fe5b602090810291909101015260010161183a565b509150506107c16119f9565b6000547501000000000000000000000000000000000000000000900460ff1690565b606060006118b66001548561262190919063ffffffff16565b90506118c3848483612aff565b60608401516118d28180612bd3565b60008281526005602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055608087015190516060913091611920919061530e565b600060405180830381855af49150503d806000811461195b576040519150601f19603f3d011682016040523d82523d6000602084013e611960565b606091505b50915091508161197757611977610a388583612c36565b611982836000612bd3565b60405184907fa4a7329f1dd821363067e07d359e347b4af9b1efe4b6cccf13240228af3c800d90600090a29695505050505050565b600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000179055565b600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055611a29612c53565b565b60005474010000000000000000000000000000000000000000900460ff1615611a5957611a59610a38612c88565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055565b611aa26145ec565b611aab8261111d565b9050611ab78282612cbf565b805160ff16600314611ac9575061080f565b610c1c828260200151612d6e565b611adf61187b565b611a2957611a29612c53565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b600082821115611b2e57611b2e610a3860028585612e17565b50900390565b611b3c614561565b6040516060907f9b44d5560000000000000000000000000000000000000000000000000000000090611b7690879087908790602401615a58565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050600060603073ffffffffffffffffffffffffffffffffffffffff1683604051611bfe919061530e565b600060405180830381855af49150503d8060008114611c39576040519150601f19603f3d011682016040523d82523d6000602084013e611c3e565b606091505b50915091508115611c6b57805160a014611c5457fe5b80806020019051611c689190810190614f25565b93505b5050509392505050565b611c7d614561565b81518351611c909163ffffffff612e3616565b815260208083015190840151611cab9163ffffffff612e3616565b602082015260408083015190840151611cc99163ffffffff612e3616565b604082015260608083015190840151611ce79163ffffffff612e3616565b606082015260808083015190840151611d059163ffffffff612e3616565b608082015292915050565b60065460009073ffffffffffffffffffffffffffffffffffffffff16818115611d395781611d3b565b335b9250505090565b6060634ad3127560e01b848484604051602401611d61939291906153a3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290509392505050565b805160208201fd5b611df7614590565b8551611e0a57611e0a610a386000612e52565b8451611e1d57611e1d610a386001612e52565b8351865114611e3357611e33610a386002612e52565b8251855114611e4957611e49610a386003612e52565b8551604051908082528060200260200182016040528015611e8457816020015b611e71614561565b815260200190600190039081611e695790505b5081528451604080518281526020808402820101909152908015611ec257816020015b611eaf614561565b815260200190600190039081611ea75790505b506020820152600080611ed361460c565b88600081518110611ee057fe5b60200260200101519050611ef261460c565b88600081518110611eff57fe5b602002602001015190506000611f14836127a4565b9150506000611f22836127a4565b915050611f2d614561565b611f35614561565b611f3d6145b8565b611f7087878f8c81518110611f4e57fe5b60200260200101518f8c81518110611f6257fe5b60200260200101518f612515565b805160200151909150611f8a90869063ffffffff612e3616565b9450611fa781602001516020015185612e3690919063ffffffff16565b9350611fb7838260000151611c75565b9250611fc7828260200151611c75565b9150611fe481604001518b60400151612e3690919063ffffffff16565b60408b0152606080820151908b01516120029163ffffffff612e3616565b60608b015260a087015185106120ad578951805160018b019a859291811061202657fe5b60200260200101819052506040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525092508e5189141561208a57818a60200151898151811061207957fe5b60200260200101819052505061214b565b8e898151811061209657fe5b602002602001015196506120a9876127a4565b9550505b8560a00151841061214557818a6020015189806001019a50815181106120cf57fe5b60200260200101819052506040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525091508d5188141561212257828a600001518a8151811061207957fe5b8d888151811061212e57fe5b60200260200101519550612141866127a4565b9450505b50611f35565b505050505050505095945050505050565b6000610b3783612172868563ffffffff612ef116565b9063ffffffff612f2216565b600061218b848484612f4c565b905073ffffffffffffffffffffffffffffffffffffffff83166121b8576121b8610a3860068686866121fd565b600881818111156121c557fe5b60ff16106121dd576121dd610a3860038686866121fd565b60008160088111156121eb57fe5b141561093257610932610a3860048686865b6060637e5a231860e01b8585858560405160240161221e94939291906158b9565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050949350505050565b600060018560088111156122b557fe5b14156122dc5781516001146122d4576122d4610a3860028686866121fd565b506000610b37565b60028560088111156122ea57fe5b14156123e357815160421461230957612309610a3860028686866121fd565b60008260008151811061231857fe5b016020015160f81c9050600061233584600163ffffffff612f8b16565b9050600061234a85602163ffffffff612f8b16565b9050600060018885858560405160008152602001604052604051612371949392919061560d565b6020604051602081039080840390855afa158015612393573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015173ffffffffffffffffffffffffffffffffffffffff8981169116149550610b37945050505050565b60038560088111156123f157fe5b141561249e57815160421461241057612410610a3860028686866121fd565b60008260008151811061241f57fe5b016020015160f81c9050600061243c84600163ffffffff612f8b16565b9050600061245185602163ffffffff612f8b16565b90506000600188604051602001612468919061532a565b6040516020818303038152906040528051906020012085858560405160008152602001604052604051612371949392919061560d565b60048560088111156124ac57fe5b14156124c4576124bd848484612fb5565b9050610b37565b60068560088111156124d257fe5b146124d957fe5b50600083815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915290205460ff16949350505050565b61251d6145b8565b61016080870151610140808801919091528701519086015261253d6145ec565b6125468761111d565b90506125506145ec565b6125598761111d565b90506000612565611d10565b90506125738984838a6131ab565b61257f888383896131ab565b6125938989856020015185602001516132e1565b6125ac8989856040015185604001516003543a8b61332c565b93506125c78982856020015186604001518860000151613481565b6125e08882846020015185604001518860200151613481565b6125f6836020015183602001518b8b858961355f565b50505095945050505050565b60606318e4b14160e01b848484604051602401611d619392919061589e565b60006109328261263085613706565b61378e565b60608301516000908161264985838661217e565b9050600581600881111561265957fe5b141561267b5761267461266c87876137c8565b868487613800565b92506126b2565b600781600881111561268957fe5b14156126a35761267461269c87876137c8565b83866138b4565b6126af818684876122a5565b92505b50509392505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611a2957600054611a2990610a3890339073ffffffffffffffffffffffffffffffffffffffff166138c3565b61270a614561565b6127126145ec565b61271b8561111d565b90506000612727611d10565b9050612735868383876131ab565b600061275283604001518860a00151611b1590919063ffffffff16565b9050600061276087836138e0565b905061277088826003543a6138f6565b945060008460200151905061278c89858388604001518a613481565b612798818a868961396d565b50505050509392505050565b6000806127bc600154846127d590919063ffffffff16565b6000818152600960205260409020549092509050915091565b60006109328261263085613a04565b8251600090816127f585838661217e565b9050600581600881111561280557fe5b14156128185761267461266c8787613adb565b600781600881111561282657fe5b14156126a35761267461269c8787613adb565b80156129ec57600384511161285757612857610a3860008787613b13565b6000612869858263ffffffff613b3216565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526002602052604090205490915073ffffffffffffffffffffffffffffffffffffffff16806128c8576128c8610a3860018989613b13565b6040516060907fa85e59e400000000000000000000000000000000000000000000000000000000906129049089908990899089906024016156b3565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050600060608373ffffffffffffffffffffffffffffffffffffffff168360405161298c919061530e565b6000604051808303816000865af19150503d80600081146129c9576040519150601f19603f3d011682016040523d82523d6000602084013e6129ce565b606091505b5091509150816129e6576129e6610a388b8b84613b7e565b50505050505b5050505050565b6129fb614561565b612a06848484612702565b90508281602001511461093257610932610a386002858460200151612602565b60606311c7b72060e01b8383604051602401612a43929190615658565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905092915050565b60408051808201909152600481527fe69edc3e00000000000000000000000000000000000000000000000000000000602082015290565b82602001514210612b1857612b18610a38600183613b9d565b60408301513a8114612b3257612b32610a38833a84613bba565b60065473ffffffffffffffffffffffffffffffffffffffff168015612b5e57612b5e610a388483613bd9565b60008381526005602052604090205460ff1615612b8357612b83610a38600085613b9d565b606085015173ffffffffffffffffffffffffffffffffffffffff81163314801590612bb65750612bb4868587612635565b155b15612bcb57612bcb610a3860018684896121fd565b505050505050565b73ffffffffffffffffffffffffffffffffffffffff82163314610c1c576006805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff00000000000000000000000000000000000000009091161790555050565b60606320d11f6160e01b8383604051602401612a43929190615551565b3031801561080f57604051339082156108fc029083906000818181858888f19350505050158015610c1c573d6000803e3d6000fd5b60408051808201909152600481527f0c3b823f00000000000000000000000000000000000000000000000000000000602082015290565b606082015173ffffffffffffffffffffffffffffffffffffffff1615612d1357606082015173ffffffffffffffffffffffffffffffffffffffff163314612d1357612d13610a386002836020015133613bf6565b6000612d1d611d10565b90508073ffffffffffffffffffffffffffffffffffffffff16836000015173ffffffffffffffffffffffffffffffffffffffff1614612d6957612d69610a386000846020015184613bf6565b505050565b6000818152600a60205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558281015183516101408501516101608601519351859473ffffffffffffffffffffffffffffffffffffffff9485169493909316927f02c310a9a43963ff31a754a4099cc435ed498049687539d72d7818d9b093415c92612e0b92909190339061571b565b60405180910390a45050565b606063e946c1bb60e01b848484604051602401611d6193929190615846565b60008282018381101561093257610932610a3860008686612e17565b606063d4092f4f60e01b82604051602401612e6d9190615833565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050919050565b600082612f00575060006107c1565b82820282848281612f0d57fe5b041461093257610932610a3860018686612e17565b600081612f3857612f38610a3860038585612e17565b6000828481612f4357fe5b04949350505050565b6000815160001415612f6857612f68610a3860028686866121fd565b81600183510381518110612f7857fe5b016020015160f81c6008811115610b3757fe5b60008160200183511015612fac57612fac610a386005855185602001613c15565b50016020015190565b8051600090612fec837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830163ffffffff613c3416565b6040516060907f1626ba7e00000000000000000000000000000000000000000000000000000000906130249088908790602401615551565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290506130b3848363ffffffff613c3416565b600060608673ffffffffffffffffffffffffffffffffffffffff16836040516130dc919061530e565b600060405180830381855afa9150503d8060008114613117576040519150601f19603f3d011682016040523d82523d6000602084013e61311c565b606091505b509150915081801561312f575080516020145b15613191577fb06713810000000000000000000000000000000000000000000000000000000061316682600063ffffffff613b3216565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614945050505050610932565b6131a0610a3889898985613c38565b505050509392505050565b825160ff166003146131da576131da610a388460200151856000015160ff1660068111156131d557fe5b613c59565b606084015173ffffffffffffffffffffffffffffffffffffffff161561322e57606084015173ffffffffffffffffffffffffffffffffffffffff16331461322e5761322e610a386002856020015133613bf6565b602084015173ffffffffffffffffffffffffffffffffffffffff1615613298578173ffffffffffffffffffffffffffffffffffffffff16846020015173ffffffffffffffffffffffffffffffffffffffff161461329857613298610a386001856020015185613bf6565b8351604084015115806132b557506132b584602001518284613c76565b156129ec576132c9858560200151846127e4565b6129ec576129ec610a386000866020015184866121fd565b60a080840151908501516132fa9163ffffffff612ef116565b608080850151908601516133139163ffffffff612ef116565b101561332657613326610a388383613cc9565b50505050565b6133346145b8565b60a088015160009061334c908863ffffffff611b1516565b905060006133638a608001518b60a0015184613ce6565b9050600061337e888b60a00151611b1590919063ffffffff16565b905060006133958b608001518c60a0015184613ce6565b905085156133b2576133ab8c8c85878587613d1a565b94506133c3565b6133c08c8c85878587613dec565b94505b84515160808d015160c08e01516133db929190613ce6565b85516040015284516020015160a08d015160e08e01516133fc929190613ce6565b85516060015260208501515160808c015160c08d015161341d929190613ce6565b856020015160400181815250506134458560200151602001518c60a001518d60e00151613ce6565b6020860151606001526000613460888a63ffffffff612ef116565b86516080908101829052602088015101525050505050979650505050505050565b602081015161349790839063ffffffff612e3616565b600960008581526020019081526020016000208190555082856040015173ffffffffffffffffffffffffffffffffffffffff16866000015173ffffffffffffffffffffffffffffffffffffffff167f6869791f0a34781b29882982cc39e882768cf2c96995c2a110c577c53bc932d58861014001518961016001518a61018001518b6101a001518b338a600001518b602001518c604001518d606001518e608001516040516135509b9a99989796959493929190615767565b60405180910390a45050505050565b8351835160408087015190860151610140870151855160200151613588918b9186908890612839565b6135a28a8961014001518686896020015160200151612839565b6135bc898861018001518584896020015160400151612839565b6135d68a8961018001518685896000015160400151612839565b6135ec8a89610140015186898960400151612839565b6136028988610140015185898960600151612839565b600061361a8b8b88600001516080015188888c613e85565b905080613637578551600060809182018190526020880151909101525b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561368757506101a080890151908a01516136879163ffffffff613ee216565b156136c5576136c08b8a6101a0015189866136bb8b60200151606001518c6000015160600151612e3690919063ffffffff16565b612839565b6136f9565b6136df8a896101a0015189858a6020015160600151612839565b6136f98b8a6101a0015189868a6000015160600151612839565b5050505050505050505050565b608081810151825160208085015160408087015160609788015186519685019690962082517fec69816980a3a3ca4554410e60253953e9ff375ba4536a98adfa15cc71541508815294850195909552908301919091529481019490945273ffffffffffffffffffffffffffffffffffffffff9091169183019190915260a082015260c0902090565b6040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6040516060907fde047db40000000000000000000000000000000000000000000000000000000090612a439085908590602401615a83565b8051600090601581101561381e5761381e610a3860028787876121fd565b6000613852847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb840163ffffffff613f0716565b73ffffffffffffffffffffffffffffffffffffffff80871660009081526008602090815260408083209385168352929052205490915060ff1661389c5761389c610a388683613f47565b6138a98188866015613f64565b979650505050505050565b6000610b378385846001613f64565b6060631de45ad160e01b8383604051602401612a4392919061537c565b60008183106138ef5781610932565b5090919050565b6138fe614561565b6020810184905260a0850151608086015161391a918691613ce6565b815260a085015160c0860151613931918691613ce6565b604082015260a085015160e086015161394b918691613ce6565b6060820152613960828463ffffffff612ef116565b6080820152949350505050565b613987848461016001518486600001518560200151612839565b6139a1848461014001518560000151858560000151612839565b6139bb84846101a001518486604001518560600151612839565b6139d984846101800151856000015186604001518560400151612839565b60006139ef85836080015186600001518661413b565b9050806129ec57600060808301525050505050565b6101408101516101608201516101808301516101a08401516000937ff80322eb8376aafb64eadf8f0d7623f22130fd9491a221e902b713cb984a753493909290916020871015613a5057fe5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe087018051610140890180516101608b0180516101808d0180516101a08f0180519d89528c5160209d8e012087528b519b8d019b909b2084528951998c01999099208152875197909a019690962088526101e085209390945290529190529252919091529050919050565b6040516060907f3efe50c80000000000000000000000000000000000000000000000000000000090612a439085908590602401615a36565b606063488219a660e01b848484604051602401611d619392919061580b565b60008160040183511015613b5357613b53610a386003855185600401613c15565b5001602001517fffffffff000000000000000000000000000000000000000000000000000000001690565b6060634678472b60e01b848484604051602401611d619392919061556a565b606063f598518460e01b8383604051602401612a439291906158fd565b606063a26dac0960e01b848484604051602401611d61939291906155f7565b606063dec4aedf60e01b8383604051602401612a439291906154d8565b606063e53c76c860e01b848484604051602401611d6193929190615867565b6060632800659560e01b848484604051602401611d61939291906158ab565b9052565b6060631b8388f760e01b8585858560405160240161221e94939291906154fc565b606063fdb6ca8d60e01b8383604051602401612a43929190615595565b600080613c84858585612f4c565b90506004816008811115613c9457fe5b1480613cab57506005816008811115613ca957fe5b145b80610de657506007816008811115613cbf57fe5b1495945050505050565b606063b6555d6f60e01b8383604051602401612a43929190615543565b6000613cf3848484614181565b15613d0657613d06610a388585856141e7565b610b3783612172868563ffffffff612ef116565b613d226145b8565b81851184841184861115613d4257613d3b898686614206565b9250613d91565b86841115613d825782518790528251602001869052608088015160a0890151613d6c919089613ce6565b6020808501805192909252905101879052613d91565b613d8e87878787614243565b92505b8115613db7576020808401510151835151613db19163ffffffff611b1516565b60408401525b8015613ddf5782516020908101519084015151613dd99163ffffffff611b1516565b60608401525b50505b9695505050505050565b613df46145b8565b82841115613e0e57613e07878484614206565b9050613e5c565b82841015613e4d5780518590528051602090810185905281015184905260a08601516080870151613e4091908661426e565b6020808301510152613e5c565b613e5985858585614243565b90505b6020808201510151815151613e769163ffffffff611b1516565b60408201529695505050505050565b60045460009073ffffffffffffffffffffffffffffffffffffffff168015613ed85730316000613eb98a84848b8b8a6142c2565b9050613ecb89848385038b8a8a6142c2565b5060019350505050613de2565b6000915050613de2565b6000815183511480156109325750508051602091820120825192909101919091201490565b60008160140183511015613f2857613f28610a386004855185601401613c15565b50016014015173ffffffffffffffffffffffffffffffffffffffff1690565b606063a15c0d0660e01b8383604051602401612a4392919061537c565b8151600090613f7b8484830363ffffffff613c3416565b6040516060907f20c13b0b0000000000000000000000000000000000000000000000000000000090613fb390889088906024016156f6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050614042858363ffffffff613c3416565b600060608873ffffffffffffffffffffffffffffffffffffffff168360405161406b919061530e565b600060405180830381855afa9150503d80600081146140a6576040519150601f19603f3d011682016040523d82523d6000602084013e6140ab565b606091505b50915091508180156140be575080516020145b15614120577f20c13b0b000000000000000000000000000000000000000000000000000000006140f582600063ffffffff613b3216565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614945050505050610b37565b61412f610a388a8a8a856143fa565b50505050949350505050565b60045460009073ffffffffffffffffffffffffffffffffffffffff1680156141775761416c868230318888886142c2565b506001915050610b37565b6000915050610b37565b60008261419357614193610a3861441b565b81158061419e575083155b156141ab57506000610932565b600083806141b557fe5b85840990506141ca858463ffffffff612ef116565b6141dc826103e863ffffffff612ef116565b101595945050505050565b606063339f3de260e01b848484604051602401611d61939291906155f7565b61420e6145b8565b60208082018051859052518101839052815101839052608084015160a0850151614239919085613ce6565b8151529392505050565b61424b6145b8565b805194909452835160209081019390935282840180519290925290519091015290565b600061427b848484614452565b1561428e5761428e610a388585856141e7565b610b37836121726142a682600163ffffffff611b1516565b6142b6888763ffffffff612ef116565b9063ffffffff612e3616565b60008385106142ce5750825b6040516060907fa3b4a3270000000000000000000000000000000000000000000000000000000090614308908690869089906024016153a3565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050600060608873ffffffffffffffffffffffffffffffffffffffff168484604051614391919061530e565b60006040518083038185875af1925050503d80600081146143ce576040519150601f19603f3d011682016040523d82523d6000602084013e6143d3565b606091505b5091509150816143ed576143ed610a388b898989866144b6565b5050509695505050505050565b6060635bd0428d60e01b8585858560405160240161221e94939291906153d4565b60408051808201909152600481527fa791837c00000000000000000000000000000000000000000000000000000000602082015290565b60008261446457614464610a3861441b565b81158061446f575083155b1561447c57506000610932565b6000838061448657fe5b85840990508361449c818363ffffffff611b1516565b816144a357fe5b0690506141ca858463ffffffff612ef116565b60606387cb1e7560e01b86868686866040516024016144d99594939291906155b2565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905095945050505050565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6040518060800160405280606081526020016060815260200160008152602001600081525090565b60405180608001604052806145cb614561565b81526020016145d8614561565b815260200160008152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b604051806101c00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001606081525090565b803573ffffffffffffffffffffffffffffffffffffffff811681146107c157600080fd5b600082601f830112614707578081fd5b813561471a61471582615b14565b615aed565b81815291506020808301908481018184028601820187101561473b57600080fd5b60005b848110156147625761475088836146d3565b8452928201929082019060010161473e565b505050505092915050565b600082601f83011261477d578081fd5b813561478b61471582615b14565b8181529150602080830190840160005b838110156147c8576147b3876020843589010161488b565b8352602092830192919091019060010161479b565b5050505092915050565b600082601f8301126147e2578081fd5b81356147f061471582615b14565b8181529150602080830190840160005b838110156147c8576148188760208435890101614912565b83526020928301929190910190600101614800565b600082601f83011261483d578081fd5b813561484b61471582615b14565b81815291506020808301908481018184028601820187101561486c57600080fd5b60005b848110156147625781358452928201929082019060010161486f565b600082601f83011261489b578081fd5b813567ffffffffffffffff8111156148b1578182fd5b6148e260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615aed565b91508082528360208285010111156148f957600080fd5b8060208401602084013760009082016020015292915050565b60006101c0808385031215614925578182fd5b61492e81615aed565b91505061493b83836146d3565b815261494a83602084016146d3565b602082015261495c83604084016146d3565b604082015261496e83606084016146d3565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e08201526101008083013581830152506101208083013581830152506101408083013567ffffffffffffffff808211156149d057600080fd5b6149dc8683870161488b565b838501526101609250828501359150808211156149f857600080fd5b614a048683870161488b565b83850152610180925082850135915080821115614a2057600080fd5b614a2c8683870161488b565b838501526101a0925082850135915080821115614a4857600080fd5b50614a558582860161488b565b82840152505092915050565b600060a08284031215614a72578081fd5b614a7c60a0615aed565b90508135815260208201356020820152604082013560408201526060820135614aa481615b88565b6060820152608082013567ffffffffffffffff811115614ac357600080fd5b614acf8482850161488b565b60808301525092915050565b600060208284031215614aec578081fd5b61093283836146d3565b60008060408385031215614b08578081fd5b614b1284846146d3565b9150614b2184602085016146d3565b90509250929050565b60008060408385031215614b3c578182fd5b614b4684846146d3565b915060208301358015158114614b5a578182fd5b809150509250929050565b60008060008060808587031215614b7a578182fd5b843567ffffffffffffffff80821115614b91578384fd5b614b9d8883890161476d565b95506020870135915080821115614bb2578384fd5b614bbe888389016146f7565b94506040870135915080821115614bd3578384fd5b614bdf888389016146f7565b93506060870135915080821115614bf4578283fd5b50614c018782880161482d565b91505092959194509250565b600060208284031215614c1e578081fd5b813567ffffffffffffffff811115614c34578182fd5b610b37848285016147d2565b60008060008060808587031215614c55578182fd5b843567ffffffffffffffff80821115614c6c578384fd5b614c78888389016147d2565b95506020870135915080821115614c8d578384fd5b614c99888389016147d2565b94506040870135915080821115614cae578384fd5b614cba8883890161476d565b93506060870135915080821115614ccf578283fd5b50614c018782880161476d565b600080600060608486031215614cf0578081fd5b833567ffffffffffffffff80821115614d07578283fd5b614d13878388016147d2565b94506020860135915080821115614d28578283fd5b614d348783880161482d565b93506040860135915080821115614d49578283fd5b50614d568682870161476d565b9150509250925092565b600080600060608486031215614d74578081fd5b833567ffffffffffffffff80821115614d8b578283fd5b614d97878388016147d2565b9450602086013593506040860135915080821115614d49578283fd5b60008060408385031215614dc5578182fd5b823567ffffffffffffffff80821115614ddc578384fd5b81850186601f820112614ded578485fd5b80359250614dfd61471584615b14565b83815260208082019190838101885b87811015614e3557614e238c848435890101614a61565b85529382019390820190600101614e0c565b50919750880135945050505080821115614e4d578283fd5b50614e5a8582860161476d565b9150509250929050565b600060208284031215614e75578081fd5b5035919050565b60008060408385031215614e8e578182fd5b823591506020830135614b5a81615b88565b600080600060608486031215614eb4578081fd5b833592506020840135614ec681615b88565b9150604084013567ffffffffffffffff811115614ee1578182fd5b614d568682870161488b565b600060208284031215614efe578081fd5b813561093281615baa565b600060208284031215614f1a578081fd5b815161093281615baa565b600060a0828403128015614f37578182fd5b8015614f41578182fd5b50614f4c60a0615aed565b82518152602083015160208201526040830151604082015260608301516060820152608083015160808201528091505092915050565b600060208284031215614f93578081fd5b813567ffffffffffffffff811115614fa9578182fd5b610b3784828501614912565b60008060408385031215614fc7578182fd5b823567ffffffffffffffff80821115614fde578384fd5b614fea86838701614912565b93506020850135915080821115614fff578283fd5b50614e5a8582860161488b565b60008060008060808587031215615021578182fd5b843567ffffffffffffffff80821115615038578384fd5b61504488838901614912565b95506020870135915080821115615059578384fd5b61506588838901614912565b9450604087013591508082111561507a578384fd5b6150868883890161488b565b9350606087013591508082111561509b578283fd5b50614c018782880161488b565b6000806000606084860312156150bc578081fd5b833567ffffffffffffffff808211156150d3578283fd5b6150df87838801614912565b94506020860135935060408601359150808211156150fb578283fd5b50614d568682870161488b565b6000806040838503121561511a578182fd5b823567ffffffffffffffff80821115615131578384fd5b614fea86838701614a61565b73ffffffffffffffffffffffffffffffffffffffff169052565b6000815180845260208401935060208301825b828110156151935761517d8683516151e7565b60a095909501946020919091019060010161516a565b5093949350505050565b600081518084526151b5816020860160208601615b34565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b80518252602081015160208301526040810151604083015260608101516060830152608081015160808301525050565b60006101c061522784845161513d565b6020830151615239602086018261513d565b50604083015161524c604086018261513d565b50606083015161525f606086018261513d565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e08501526101008084015181860152506101208084015181860152506101408084015182828701526152b88387018261519d565b915050610160915081840151858203838701526152d5828261519d565b9250505061018080840151858303828701526152f1838261519d565b9150506101a091508184015185820383870152613de2828261519d565b60008251615320818460208701615b34565b9190910192915050565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b600073ffffffffffffffffffffffffffffffffffffffff8616825260806020830152615403608083018661519d565b8281036040840152615415818661519d565b8381036060850152615427818661519d565b98975050505050505050565b6000602080830181845280855180835260408601915060408482028701019250838701855b828110156154a4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261549285835161519d565b94509285019290850190600101615458565b5092979650505050505050565b6000602082526109326020830184615157565b901515815260200190565b90815260200190565b91825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b600085825273ffffffffffffffffffffffffffffffffffffffff8516602083015260806040830152615531608083018561519d565b82810360608401526138a9818561519d565b918252602082015260400190565b600083825260406020830152610b37604083018461519d565b600084825260606020830152615583606083018561519d565b8281036040840152613de2818561519d565b828152604081016155a583615b7e565b8260208301529392505050565b600086825285602083015273ffffffffffffffffffffffffffffffffffffffff808616604084015280851660608401525060a060808301526138a960a083018461519d565b9283526020830191909152604082015260600190565b93845260ff9290921660208401526040830152606082015260800190565b7fffffffff0000000000000000000000000000000000000000000000000000000091909116815260200190565b7fffffffff0000000000000000000000000000000000000000000000000000000092909216825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b600060208252610932602083018461519d565b6000608082526156c6608083018761519d565b73ffffffffffffffffffffffffffffffffffffffff95861660208401529390941660408201526060015292915050565b600060408252615709604083018561519d565b8281036020840152610de6818561519d565b60006060825261572e606083018661519d565b8281036020840152615740818661519d565b91505073ffffffffffffffffffffffffffffffffffffffff83166040830152949350505050565b600061016080835261577b8184018f61519d565b838103602085015261578d818f61519d565b91505082810360408401526157a2818d61519d565b83810360608501526157b4818d61519d565b73ffffffffffffffffffffffffffffffffffffffff9b8c16608086015299909a1660a0840152505060c081019590955260e08501939093526101008401919091526101208301526101409091015295945050505050565b600061581685615b60565b84825283602083015260606040830152610de6606083018461519d565b6020810161584083615b6a565b91905290565b6060810161585385615b6a565b938152602081019290925260409091015290565b6060810161587485615b74565b938152602081019290925273ffffffffffffffffffffffffffffffffffffffff1660409091015290565b6060810161585385615b74565b606081016008851061585357fe5b60006158c486615b7e565b85825284602083015273ffffffffffffffffffffffffffffffffffffffff8416604083015260806060830152613de2608083018461519d565b6040810161590a84615b60565b9281526020015290565b60208082526014908201527f5452414e53464552535f5355434345535346554c000000000000000000000000604082015260600190565b60006020825282516080602084015261596760a0840182615157565b602085015191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08482030160408501526159a28183615157565b604086015160608601526060860151608086015280935050505092915050565b60a081016107c182846151e7565b6000610180820190506159e48284516151e7565b60208301516159f660a08401826151e7565b5060408301516101408301526060909201516101609091015290565b815160ff168152602080830151908201526040918201519181019190915260600190565b600060408252615a496040830185615217565b90508260208301529392505050565b600060608252615a6b6060830186615217565b8460208401528281036040840152613de2818561519d565b60006040825283516040830152602084015160608301526040840151608083015273ffffffffffffffffffffffffffffffffffffffff60608501511660a0830152608084015160a060c0840152615add60e084018261519d565b9150508260208301529392505050565b60405181810167ffffffffffffffff81118282101715615b0c57600080fd5b604052919050565b600067ffffffffffffffff821115615b2a578081fd5b5060209081020190565b60005b83811015615b4f578181015183820152602001615b37565b838111156133265750506000910152565b6002811061080f57fe5b6004811061080f57fe5b6003811061080f57fe5b6007811061080f57fe5b73ffffffffffffffffffffffffffffffffffffffff8116811461080f57600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008116811461080f57600080fd5b8351602094850120835193850193909320604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f815295860194909452928401929092526060830152608082015260a090209056fea365627a7a723158206fc97c5a1d6fde6b2ada9eb4429966e52d7e2da39180893c04bf55c840b346a16c6578706572696d656e74616cf564736f6c634300050c0040" + "object": "0x6080604052600436106102dc5760003560e01c80638d45cd2311610184578063beee2e14116100d6578063dd885e2d1161008a578063eea086ba11610064578063eea086ba14610735578063f2fde38b1461074a578063fc74896d1461076a576102dc565b8063dd885e2d146106ed578063dedfc1f11461070f578063e14b58c414610722576102dc565b8063c26cfecd116100bb578063c26cfecd14610698578063c585bb93146106ad578063d9bfa73e146106cd576102dc565b8063beee2e1414610665578063c0fa16cc14610678576102dc565b80639b44d55611610138578063a6c3bf3311610112578063a6c3bf331461061f578063b04fbddd14610632578063b718e29214610652576102dc565b80639b44d556146105bf5780639d3fa4b9146105d2578063a12dcc6f146105ff576102dc565b80638ea8dfe4116101695780638ea8dfe41461056c5780639331c7421461058c5780639694a402146105ac576102dc565b80638d45cd23146105375780638da5cb5b14610557576102dc565b8063607041081161023d5780637b8e3514116101f1578063850a1501116101cb578063850a1501146104ef57806388ec79fb146105045780638bc8efb314610524576102dc565b80637b8e35141461048f5780638171c407146104af57806382c174d0146104cf576102dc565b80636fcf3e9e116102225780636fcf3e9e1461045657806377fcce681461046957806378d29ac11461047c576102dc565b806360704108146104095780636a1a80fd14610436576102dc565b80632ac1262211610294578063369da09911610279578063369da099146103c357806346c02d7a146103e35780634f9559b1146103f6576102dc565b80632ac12622146103905780632da62987146103b0576102dc565b80631ce4c78b116102c55780631ce4c78b1461032e5780632280c91014610350578063288cdc9114610370576102dc565b80630228e168146102e15780630efca18514610317575b600080fd5b3480156102ed57600080fd5b506103016102fc366004614e6f565b61078a565b60405161030e91906154c3565b60405180910390f35b34801561032357600080fd5b5061032c61079f565b005b34801561033a57600080fd5b506103436107b3565b60405161030e91906154ce565b61036361035e366004615107565b6107b9565b60405161030e919061569f565b34801561037c57600080fd5b5061034361038b366004614e6f565b6107fb565b34801561039c57600080fd5b506103016103ab366004614e6f565b61080d565b61032c6103be366004614f81565b610822565b6103d66103d1366004614d6b565b610846565b60405161030e91906159c1565b61032c6103f1366004614e6f565b61096d565b61032c610404366004614e6f565b6109e0565b34801561041557600080fd5b50610429610424366004614ef8565b610aed565b60405161030e919061535a565b610449610444366004614c4b565b610b3b565b60405161030e919061594a565b610449610464366004614c4b565b610b73565b61032c610477366004614b35565b610b91565b6103d661048a366004614d6b565b610c54565b34801561049b57600080fd5b506103016104aa366004614b01565b610da4565b3480156104bb57600080fd5b506103016104ca366004614eab565b610dc4565b3480156104db57600080fd5b506103016104ea366004614e87565b610e23565b3480156104fb57600080fd5b50610429610e43565b61051761051236600461500b565b610e5f565b60405161030e91906159cf565b6103d6610532366004614d6b565b610e7d565b34801561054357600080fd5b50610301610552366004615107565b610eb1565b34801561056357600080fd5b50610429610ed6565b61057f61057a366004614ce7565b610ef2565b60405161030e91906154b0565b34801561059857600080fd5b5061032c6105a7366004614e6f565b61101d565b61057f6105ba366004614ce7565b611065565b6103d66105cd3660046150a7565b61112c565b3480156105de57600080fd5b506105f26105ed366004614f81565b611151565b60405161030e9190615a11565b34801561060b57600080fd5b5061030161061a366004614fb4565b611246565b6103d661062d366004614d6b565b61126b565b34801561063e57600080fd5b5061032c61064d366004614b70565b61129f565b61051761066036600461500b565b61134b565b61057f610673366004614ce7565b611369565b34801561068457600080fd5b5061032c610693366004614ae6565b61141e565b3480156106a457600080fd5b5061034361142f565b3480156106b957600080fd5b5061032c6106c8366004614ae6565b611435565b3480156106d957600080fd5b506103436106e8366004614b01565b6115c9565b3480156106f957600080fd5b506107026115e6565b60405161030e919061562a565b61032c61071d366004614c18565b61160a565b6103d66107303660046150a7565b61164c565b34801561074157600080fd5b50610429611667565b34801561075657600080fd5b5061032c610765366004614ae6565b611683565b61077d610778366004614dbe565b611726565b60405161030e9190615432565b60056020526000908152604090205460ff1681565b6107a761184f565b6107b16000611896565b565b60035481565b60606107c3611931565b156107d9576107d28383611953565b90506107f5565b6107e1611a6d565b6107eb8383611953565b90506107f5611aaf565b92915050565b60096020526000908152604090205481565b600a6020526000908152604090205460ff1681565b61082a611adf565b61083381611b4e565b61083b611b93565b610843611ba7565b50565b61084e61456a565b610856611931565b156108ec57835160005b8181146108e5576000610880846020015187611bd190919063ffffffff16565b905061088a61456a565b6108bb88848151811061089957fe5b6020026020010151838886815181106108ae57fe5b6020026020010151611bf0565b90506108c78582611d31565b9450868560200151106108db5750506108e5565b5050600101610860565b5050610966565b6108f4611a6d565b835160005b81811461095c576000610919846020015187611bd190919063ffffffff16565b905061092361456a565b61093288848151811061089957fe5b905061093e8582611d31565b94508685602001511061095257505061095c565b50506001016108f9565b5050610966611aaf565b9392505050565b610975611adf565b600061097f611dcc565b600083815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff90941683529290522080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555061083b611b93565b6109e8611adf565b60006109f2611dcc565b9050600073ffffffffffffffffffffffffffffffffffffffff82163314610a195733610a1c565b60005b73ffffffffffffffffffffffffffffffffffffffff8084166000908152600b60209081526040808320938516835292905220549091506001840190808211610a7157610a71610a6c858584611dfe565b611ea3565b73ffffffffffffffffffffffffffffffffffffffff8085166000818152600b602090815260408083209488168084529490915290819020859055517f82af639571738f4ebd4268fb0363d8957ebe1bbb9e78dba5ebd69eed39b154f090610ad99086906154ce565b60405180910390a35050505061083b611b93565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526002602052604090205473ffffffffffffffffffffffffffffffffffffffff165b919050565b610b43614599565b610b4b611adf565b610b59858585856001611eab565b9050610b63611b93565b610b6b611ba7565b949350505050565b610b7b614599565b610b83611adf565b610b59858585856000611eab565b610b99611adf565b6000610ba3611dcc565b73ffffffffffffffffffffffffffffffffffffffff8181166000818152600860209081526040808320948916808452949091529081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168715151790555192935090917fa8656e308026eeabce8f0bc18048433252318ab80ac79da0b3d3d8697dfba89190610c379086906154c3565b60405180910390a350610c48611b93565b610c50611ba7565b5050565b610c5c61456a565b610c64611931565b15610d2257835160005b8181146108e5578251600090610c8b90879063ffffffff611bd116565b90506000610cc8888481518110610c9e57fe5b602002602001015160a00151898581518110610cb657fe5b60200260200101516080015184612218565b9050610cd261456a565b610cf6898581518110610ce157fe5b6020026020010151838987815181106108ae57fe5b9050610d028682611d31565b955087866000015110610d17575050506108e5565b505050600101610c6e565b610d2a611a6d565b835160005b81811461095c578251600090610d4c90879063ffffffff611bd116565b90506000610d5f888481518110610c9e57fe5b9050610d6961456a565b610d78898581518110610ce157fe5b9050610d848682611d31565b955087866000015110610d995750505061095c565b505050600101610d2f565b600860209081526000928352604080842090915290825290205460ff1681565b600080610dd285858561225a565b90506005816008811115610de257fe5b1480610df957506007816008811115610df757fe5b145b15610e0e57610e0e610a6c60058787876122d9565b610e1a81868686612381565b95945050505050565b600760209081526000928352604080842090915290825290205460ff1681565b60045473ffffffffffffffffffffffffffffffffffffffff1681565b610e676145c1565b610e6f611adf565b610b598585858560006125f1565b610e8561456a565b610e90848484610c54565b9050828160000151101561096657610966610a6c60008584600001516126de565b600080610ec9600154856126fd90919063ffffffff16565b9050610b6b848285612711565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b6060610efc611931565b15610f9f578351604080518281526020808402820101909152818015610f3c57816020015b610f2961456a565b815260200190600190039081610f215790505b50915060005b8181146108e557610f80868281518110610f5857fe5b6020026020010151868381518110610f6c57fe5b60200260200101518684815181106108ae57fe5b838281518110610f8c57fe5b6020908102919091010152600101610f42565b610fa7611a6d565b8351604080518281526020808402820101909152818015610fe257816020015b610fcf61456a565b815260200190600190039081610fc75790505b50915060005b81811461095c57610ffe868281518110610f5857fe5b83828151811061100a57fe5b6020908102919091010152600101610fe8565b61102561184f565b7f3a3e76d7a75e198aef1f53137e4f2a8a2ec74e2e9526db8404d08ccc9f1e621d60035482604051611058929190615542565b60405180910390a1600355565b606061106f611adf565b83516040805182815260208084028201019091528180156110aa57816020015b61109761456a565b81526020019060019003908161108f5790505b50915060005b81811461111a576110fb8682815181106110c657fe5b60200260200101518683815181106110da57fe5b60200260200101518684815181106110ee57fe5b6020026020010151612797565b83828151811061110757fe5b60209081029190910101526001016110b0565b5050611124611b93565b610966611ba7565b61113461456a565b61113c611adf565b611147848484612797565b9050611124611b93565b6111596145f5565b61116282612839565b60408301526020820152608082015161118e578060015b9081600681111561118657fe5b905250610b36565b60a082015161119f57806002611179565b8160a001518160400151106111b657806005611179565b81610100015142106111ca57806004611179565b6020808201516000908152600a909152604090205460ff16156111ef57806006611179565b610120820151825173ffffffffffffffffffffffffffffffffffffffff9081166000908152600b60209081526040808320606088015190941683529290522054111561123d57806006611179565b60038152919050565b60008061125e6001548561286a90919063ffffffff16565b9050610b6b848285612879565b61127361456a565b61127e848484610846565b9050828160200151101561096657610966610a6c60018584602001516126de565b835160005b81811461130f576113078160001b8783815181106112be57fe5b60200260200101518784815181106112d257fe5b60200260200101518785815181106112e657fe5b60200260200101518786815181106112fa57fe5b60200260200101516128ce565b6001016112a4565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134290615913565b60405180910390fd5b6113536145c1565b61135b611adf565b610b598585858560016125f1565b6060611373611adf565b83516040805182815260208084028201019091528180156113ae57816020015b61139b61456a565b8152602001906001900390816113935790505b50915060005b81811461111a576113ff8682815181106113ca57fe5b60200260200101518683815181106113de57fe5b60200260200101518684815181106113f257fe5b6020026020010151612a92565b83828151811061140b57fe5b60209081029190910101526001016113b4565b61142661184f565b61084381611896565b60015481565b61143d61184f565b60008173ffffffffffffffffffffffffffffffffffffffff1663ae25532e6040518163ffffffff1660e01b815260040160206040518083038186803b15801561148557600080fd5b505afa158015611499573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506114bd9190810190614f14565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526002602052604090205490915073ffffffffffffffffffffffffffffffffffffffff16801561151b5761151b610a6c8383612ac5565b7fffffffff0000000000000000000000000000000000000000000000000000000082166000908152600260205260409081902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8616179055517fd2c6b762299c609bdb96520b58a49bfb80186934d4f71a86a367571a15c03194906115bc9084908690615657565b60405180910390a1505050565b600b60209081526000928352604080842090915290825290205481565b7f20c13b0b0000000000000000000000000000000000000000000000000000000081565b611612611adf565b805160005b8181146116425761163a83828151811061162d57fe5b6020026020010151611b4e565b600101611617565b505061083b611b93565b61165461456a565b61165c611adf565b611147848484612a92565b60065473ffffffffffffffffffffffffffffffffffffffff1681565b61168b61184f565b73ffffffffffffffffffffffffffffffffffffffff81166116b6576116b1610a6c612b67565b610843565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6060611730611931565b156117cd57825160408051828152602080840282010190915281801561176a57816020015b60608152602001906001900390816117555790505b50915060005b8181146117c6576117a785828151811061178657fe5b602002602001015185838151811061179a57fe5b6020026020010151611953565b8382815181106117b357fe5b6020908102919091010152600101611770565b50506107f5565b6117d5611a6d565b825160408051828152602080840282010190915281801561180a57816020015b60608152602001906001900390816117f55790505b50915060005b8181146118455761182685828151811061178657fe5b83828151811061183257fe5b6020908102919091010152600101611810565b50506107f5611aaf565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107b1576000546107b190610a6c90339073ffffffffffffffffffffffffffffffffffffffff16612b9e565b6004546040517fe1a5430ebec577336427f40f15822f1f36c5e3509ff209d6db9e6c9e6941cb0b916118e29173ffffffffffffffffffffffffffffffffffffffff90911690849061537b565b60405180910390a1600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000547501000000000000000000000000000000000000000000900460ff1690565b6060600061196c600154856126fd90919063ffffffff16565b9050611979848483612bbb565b60608401516119888180612c8f565b60008281526005602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556080870151905160609130916119d6919061530d565b600060405180830381855af49150503d8060008114611a11576040519150601f19603f3d011682016040523d82523d6000602084013e611a16565b606091505b509150915081611a2d57611a2d610a6c8583612cf2565b611a38836000612c8f565b60405184907fa4a7329f1dd821363067e07d359e347b4af9b1efe4b6cccf13240228af3c800d90600090a29695505050505050565b600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000179055565b600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1690556107b1612d0f565b60005474010000000000000000000000000000000000000000900460ff1615611b0d57611b0d610a6c612d43565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055565b611b566145f5565b611b5f82611151565b9050611b6b8282612d7a565b600381516006811115611b7a57fe5b14611b855750610843565b610c50828260200151612e29565b611b9b611931565b6107b1576107b1612d0f565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b600082821115611bea57611bea610a6c60028585612ed2565b50900390565b611bf861456a565b6040516060907f9b44d5560000000000000000000000000000000000000000000000000000000090611c3290879087908790602401615a61565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050600060603073ffffffffffffffffffffffffffffffffffffffff1683604051611cba919061530d565b600060405180830381855af49150503d8060008114611cf5576040519150601f19603f3d011682016040523d82523d6000602084013e611cfa565b606091505b50915091508115611d2757805160a014611d1057fe5b80806020019051611d249190810190614f30565b93505b5050509392505050565b611d3961456a565b81518351611d4c9163ffffffff612ef116565b815260208083015190840151611d679163ffffffff612ef116565b602082015260408083015190840151611d859163ffffffff612ef116565b604082015260608083015190840151611da39163ffffffff612ef116565b606082015260808083015190840151611dc19163ffffffff612ef116565b608082015292915050565b60065460009073ffffffffffffffffffffffffffffffffffffffff16818115611df55781611df7565b335b9250505090565b6060634ad3127560e01b848484604051602401611e1d939291906153a2565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290509392505050565b805160208201fd5b611eb3614599565b8551611ec657611ec6610a6c6000612f0d565b8451611ed957611ed9610a6c6001612f0d565b8351865114611eef57611eef610a6c6002612f0d565b8251855114611f0557611f05610a6c6003612f0d565b8551604051908082528060200260200182016040528015611f4057816020015b611f2d61456a565b815260200190600190039081611f255790505b5081528451604080518281526020808402820101909152908015611f7e57816020015b611f6b61456a565b815260200190600190039081611f635790505b506020820152600080611f8f614617565b88600081518110611f9c57fe5b60200260200101519050611fae614617565b88600081518110611fbb57fe5b602002602001015190506000611fd083612839565b9150506000611fde83612839565b915050611fe961456a565b611ff161456a565b611ff96145c1565b61202c87878f8c8151811061200a57fe5b60200260200101518f8c8151811061201e57fe5b60200260200101518f6125f1565b80516020015190915061204690869063ffffffff612ef116565b945061206381602001516020015185612ef190919063ffffffff16565b9350612073838260000151611d31565b9250612083828260200151611d31565b91506120a081604001518b60400151612ef190919063ffffffff16565b60408b0152606080820151908b01516120be9163ffffffff612ef116565b60608b015260a08701518510612169578951805160018b019a85929181106120e257fe5b60200260200101819052506040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525092508e5189141561214657818a60200151898151811061213557fe5b602002602001018190525050612207565b8e898151811061215257fe5b6020026020010151965061216587612839565b9550505b8560a00151841061220157818a6020015189806001019a508151811061218b57fe5b60200260200101819052506040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525091508d518814156121de57828a600001518a8151811061213557fe5b8d88815181106121ea57fe5b602002602001015195506121fd86612839565b9450505b50611ff1565b505050505050505095945050505050565b6000610b6b8361224e61223282600163ffffffff611bd116565b612242888763ffffffff612fac16565b9063ffffffff612ef116565b9063ffffffff612fdd16565b6000612267848484613007565b905073ffffffffffffffffffffffffffffffffffffffff831661229457612294610a6c60068686866122d9565b600881818111156122a157fe5b60ff16106122b9576122b9610a6c60038686866122d9565b60008160088111156122c757fe5b141561096657610966610a6c60048686865b6060637e5a231860e01b858585856040516024016122fa94939291906158b8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050949350505050565b6000600185600881111561239157fe5b14156123b85781516001146123b0576123b0610a6c60028686866122d9565b506000610b6b565b60028560088111156123c657fe5b14156124bf5781516042146123e5576123e5610a6c60028686866122d9565b6000826000815181106123f457fe5b016020015160f81c9050600061241184600163ffffffff61304616565b9050600061242685602163ffffffff61304616565b905060006001888585856040516000815260200160405260405161244d949392919061560c565b6020604051602081039080840390855afa15801561246f573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015173ffffffffffffffffffffffffffffffffffffffff8981169116149550610b6b945050505050565b60038560088111156124cd57fe5b141561257a5781516042146124ec576124ec610a6c60028686866122d9565b6000826000815181106124fb57fe5b016020015160f81c9050600061251884600163ffffffff61304616565b9050600061252d85602163ffffffff61304616565b905060006001886040516020016125449190615329565b604051602081830303815290604052805190602001208585856040516000815260200160405260405161244d949392919061560c565b600485600881111561258857fe5b14156125a057612599848484613070565b9050610b6b565b60068560088111156125ae57fe5b146125b557fe5b50600083815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915290205460ff16949350505050565b6125f96145c1565b6101608087015161014080880191909152870151908601526126196145f5565b61262287611151565b905061262c6145f5565b61263587611151565b90506000612641611dcc565b905061264f8984838a613266565b61265b88838389613266565b61266f89898560200151856020015161337e565b6126888989856040015185604001516003543a8b6133c3565b93506126a38982856020015186604001518860000151613518565b6126bc8882846020015185604001518860200151613518565b6126d2836020015183602001518b8b85896135f6565b50505095945050505050565b60606318e4b14160e01b848484604051602401611e1d9392919061589d565b60006109668261270c8561379d565b613825565b60608301516000908161272585838661225a565b9050600581600881111561273557fe5b141561275757612750612748878761385f565b868487613897565b925061278e565b600781600881111561276557fe5b141561277f57612750612778878761385f565b838661394b565b61278b81868487612381565b92505b50509392505050565b61279f61456a565b6127a76145f5565b6127b085611151565b905060006127bc611dcc565b90506127ca86838387613266565b60006127e783604001518860a00151611bd190919063ffffffff16565b905060006127f5878361395a565b905061280588826003543a613970565b945060008460200151905061282189858388604001518a613518565b61282d818a86896139e7565b50505050509392505050565b6000806128516001548461286a90919063ffffffff16565b6000818152600960205260409020549092509050915091565b60006109668261270c85613a7e565b82516000908161288a85838661225a565b9050600581600881111561289a57fe5b14156128ad576127506127488787613b55565b60078160088111156128bb57fe5b141561277f576127506127788787613b55565b8015612a8b5760208451816128df57fe5b066004146128f6576128f6610a6c60008787613b8d565b6000612908858263ffffffff613bac16565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526002602052604090205490915073ffffffffffffffffffffffffffffffffffffffff168061296757612967610a6c60018989613b8d565b6040516060907fa85e59e400000000000000000000000000000000000000000000000000000000906129a39089908990899089906024016156b2565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050600060608373ffffffffffffffffffffffffffffffffffffffff1683604051612a2b919061530d565b6000604051808303816000865af19150503d8060008114612a68576040519150601f19603f3d011682016040523d82523d6000602084013e612a6d565b606091505b509150915081612a8557612a85610a6c8b8b84613bf8565b50505050505b5050505050565b612a9a61456a565b612aa5848484612797565b90508281602001511461096657610966610a6c60028584602001516126de565b60606311c7b72060e01b8383604051602401612ae2929190615657565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905092915050565b60408051808201909152600481527fe69edc3e00000000000000000000000000000000000000000000000000000000602082015290565b6060631de45ad160e01b8383604051602401612ae292919061537b565b82602001514210612bd457612bd4610a6c600183613c17565b60408301513a8114612bee57612bee610a6c833a84613c34565b60065473ffffffffffffffffffffffffffffffffffffffff168015612c1a57612c1a610a6c8483613c53565b60008381526005602052604090205460ff1615612c3f57612c3f610a6c600085613c17565b606085015173ffffffffffffffffffffffffffffffffffffffff81163314801590612c725750612c70868587612711565b155b15612c8757612c87610a6c60018684896122d9565b505050505050565b73ffffffffffffffffffffffffffffffffffffffff82163314610c50576006805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff00000000000000000000000000000000000000009091161790555050565b60606320d11f6160e01b8383604051602401612ae2929190615550565b47801561084357604051339082156108fc029083906000818181858888f19350505050158015610c50573d6000803e3d6000fd5b60408051808201909152600481527f0c3b823f00000000000000000000000000000000000000000000000000000000602082015290565b606082015173ffffffffffffffffffffffffffffffffffffffff1615612dce57606082015173ffffffffffffffffffffffffffffffffffffffff163314612dce57612dce610a6c6002836020015133613c70565b6000612dd8611dcc565b90508073ffffffffffffffffffffffffffffffffffffffff16836000015173ffffffffffffffffffffffffffffffffffffffff1614612e2457612e24610a6c6000846020015184613c70565b505050565b6000818152600a60205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558281015183516101408501516101608601519351859473ffffffffffffffffffffffffffffffffffffffff9485169493909316927f02c310a9a43963ff31a754a4099cc435ed498049687539d72d7818d9b093415c92612ec692909190339061571a565b60405180910390a45050565b606063e946c1bb60e01b848484604051602401611e1d93929190615845565b60008282018381101561096657610966610a6c60008686612ed2565b606063d4092f4f60e01b82604051602401612f289190615832565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050919050565b600082612fbb575060006107f5565b82820282848281612fc857fe5b041461096657610966610a6c60018686612ed2565b600081612ff357612ff3610a6c60038585612ed2565b6000828481612ffe57fe5b04949350505050565b600081516000141561302357613023610a6c60028686866122d9565b8160018351038151811061303357fe5b016020015160f81c6008811115610b6b57fe5b6000816020018351101561306757613067610a6c6005855185602001613c8f565b50016020015190565b80516000906130a7837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830163ffffffff613cae16565b6040516060907f1626ba7e00000000000000000000000000000000000000000000000000000000906130df9088908790602401615550565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905061316e848363ffffffff613cae16565b600060608673ffffffffffffffffffffffffffffffffffffffff1683604051613197919061530d565b600060405180830381855afa9150503d80600081146131d2576040519150601f19603f3d011682016040523d82523d6000602084013e6131d7565b606091505b50915091508180156131ea575080516020145b1561324c577fb06713810000000000000000000000000000000000000000000000000000000061322182600063ffffffff613bac16565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614945050505050610966565b61325b610a6c89898985613cb2565b505050509392505050565b60038351600681111561327557fe5b1461328f5761328f610a6c84602001518560000151613cd3565b606084015173ffffffffffffffffffffffffffffffffffffffff16156132e357606084015173ffffffffffffffffffffffffffffffffffffffff1633146132e3576132e3610a6c6002856020015133613c70565b602084015173ffffffffffffffffffffffffffffffffffffffff161561334d578173ffffffffffffffffffffffffffffffffffffffff16846020015173ffffffffffffffffffffffffffffffffffffffff161461334d5761334d610a6c6001856020015185613c70565b61335c84846020015183612879565b61337857613378610a6c600085602001518760000151856122d9565b50505050565b60a080840151908501516133979163ffffffff612fac16565b608080850151908601516133b09163ffffffff612fac16565b101561337857613378610a6c8383613cf0565b6133cb6145c1565b60a08801516000906133e3908863ffffffff611bd116565b905060006133fa8a608001518b60a0015184613d0d565b90506000613415888b60a00151611bd190919063ffffffff16565b9050600061342c8b608001518c60a0015184613d0d565b90508515613449576134428c8c85878587613d41565b945061345a565b6134578c8c85878587613e13565b94505b84515160808d015160c08e0151613472929190613d0d565b85516040015284516020015160a08d015160e08e0151613493929190613d0d565b85516060015260208501515160808c015160c08d01516134b4929190613d0d565b856020015160400181815250506134dc8560200151602001518c60a001518d60e00151613d0d565b60208601516060015260006134f7888a63ffffffff612fac16565b86516080908101829052602088015101525050505050979650505050505050565b602081015161352e90839063ffffffff612ef116565b600960008581526020019081526020016000208190555082856040015173ffffffffffffffffffffffffffffffffffffffff16866000015173ffffffffffffffffffffffffffffffffffffffff167f6869791f0a34781b29882982cc39e882768cf2c96995c2a110c577c53bc932d58861014001518961016001518a61018001518b6101a001518b338a600001518b602001518c604001518d606001518e608001516040516135e79b9a99989796959493929190615766565b60405180910390a45050505050565b835183516040808701519086015161014087015185516020015161361f918b91869088906128ce565b6136398a89610140015186868960200151602001516128ce565b6136538988610180015185848960200151604001516128ce565b61366d8a89610180015186858960000151604001516128ce565b6136838a896101400151868989604001516128ce565b61369989886101400151858989606001516128ce565b60006136b18b8b88600001516080015188888c613eac565b9050806136ce578551600060809182018190526020880151909101525b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561371e57506101a080890151908a015161371e9163ffffffff613f0816565b1561375c576137578b8a6101a0015189866137528b60200151606001518c6000015160600151612ef190919063ffffffff16565b6128ce565b613790565b6137768a896101a0015189858a60200151606001516128ce565b6137908b8a6101a0015189868a60000151606001516128ce565b5050505050505050505050565b608081810151825160208085015160408087015160609788015186519685019690962082517fec69816980a3a3ca4554410e60253953e9ff375ba4536a98adfa15cc71541508815294850195909552908301919091529481019490945273ffffffffffffffffffffffffffffffffffffffff9091169183019190915260a082015260c0902090565b6040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6040516060907fde047db40000000000000000000000000000000000000000000000000000000090612ae29085908590602401615a8c565b805160009060158110156138b5576138b5610a6c60028787876122d9565b60006138e9847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb840163ffffffff613f2d16565b73ffffffffffffffffffffffffffffffffffffffff80871660009081526008602090815260408083209385168352929052205490915060ff1661393357613933610a6c8683613f6d565b6139408188866015613f8a565b979650505050505050565b6000610b6b8385846001613f8a565b60008183106139695781610966565b5090919050565b61397861456a565b6020810184905260a08501516080860151613994918691613d0d565b815260a085015160c08601516139ab918691613d0d565b604082015260a085015160e08601516139c5918691613d0d565b60608201526139da828463ffffffff612fac16565b6080820152949350505050565b613a018484610160015184866000015185602001516128ce565b613a1b8484610140015185600001518585600001516128ce565b613a3584846101a0015184866040015185606001516128ce565b613a53848461018001518560000151866040015185604001516128ce565b6000613a69858360800151866000015186614161565b905080612a8b57600060808301525050505050565b6101408101516101608201516101808301516101a08401516000937ff80322eb8376aafb64eadf8f0d7623f22130fd9491a221e902b713cb984a753493909290916020871015613aca57fe5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe087018051610140890180516101608b0180516101808d0180516101a08f0180519d89528c5160209d8e012087528b519b8d019b909b2084528951998c01999099208152875197909a019690962088526101e085209390945290529190529252919091529050919050565b6040516060907f3efe50c80000000000000000000000000000000000000000000000000000000090612ae29085908590602401615a3f565b606063488219a660e01b848484604051602401611e1d9392919061580a565b60008160040183511015613bcd57613bcd610a6c6003855185600401613c8f565b5001602001517fffffffff000000000000000000000000000000000000000000000000000000001690565b6060634678472b60e01b848484604051602401611e1d93929190615569565b606063f598518460e01b8383604051602401612ae29291906158fc565b606063a26dac0960e01b848484604051602401611e1d939291906155f6565b606063dec4aedf60e01b8383604051602401612ae29291906154d7565b606063e53c76c860e01b848484604051602401611e1d93929190615866565b6060632800659560e01b848484604051602401611e1d939291906158aa565b9052565b6060631b8388f760e01b858585856040516024016122fa94939291906154fb565b606063fdb6ca8d60e01b8383604051602401612ae2929190615594565b606063b6555d6f60e01b8383604051602401612ae2929190615542565b6000613d1a8484846141a6565b15613d2d57613d2d610a6c85858561420c565b610b6b8361224e868563ffffffff612fac16565b613d496145c1565b81851184841184861115613d6957613d6289868661422b565b9250613db8565b86841115613da95782518790528251602001869052608088015160a0890151613d93919089613d0d565b6020808501805192909252905101879052613db8565b613db587878787614268565b92505b8115613dde576020808401510151835151613dd89163ffffffff611bd116565b60408401525b8015613e065782516020908101519084015151613e009163ffffffff611bd116565b60608401525b50505b9695505050505050565b613e1b6145c1565b82841115613e3557613e2e87848461422b565b9050613e83565b82841015613e745780518590528051602090810185905281015184905260a08601516080870151613e67919086614293565b6020808301510152613e83565b613e8085858585614268565b90505b6020808201510151815151613e9d9163ffffffff611bd116565b60408201529695505050505050565b60045460009073ffffffffffffffffffffffffffffffffffffffff168015613efe57476000613edf8a84848b8b8a6142cb565b9050613ef189848385038b8a8a6142cb565b5060019350505050613e09565b6000915050613e09565b6000815183511480156109665750508051602091820120825192909101919091201490565b60008160140183511015613f4e57613f4e610a6c6004855185601401613c8f565b50016014015173ffffffffffffffffffffffffffffffffffffffff1690565b606063a15c0d0660e01b8383604051602401612ae292919061537b565b8151600090613fa18484830363ffffffff613cae16565b6040516060907f20c13b0b0000000000000000000000000000000000000000000000000000000090613fd990889088906024016156f5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050614068858363ffffffff613cae16565b600060608873ffffffffffffffffffffffffffffffffffffffff1683604051614091919061530d565b600060405180830381855afa9150503d80600081146140cc576040519150601f19603f3d011682016040523d82523d6000602084013e6140d1565b606091505b50915091508180156140e4575080516020145b15614146577f20c13b0b0000000000000000000000000000000000000000000000000000000061411b82600063ffffffff613bac16565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614945050505050610b6b565b614155610a6c8a8a8a85614403565b50505050949350505050565b60045460009073ffffffffffffffffffffffffffffffffffffffff16801561419c576141918682478888886142cb565b506001915050610b6b565b6000915050610b6b565b6000826141b8576141b8610a6c614424565b8115806141c3575083155b156141d057506000610966565b600083806141da57fe5b85840990506141ef858463ffffffff612fac16565b614201826103e863ffffffff612fac16565b101595945050505050565b606063339f3de260e01b848484604051602401611e1d939291906155f6565b6142336145c1565b60208082018051859052518101839052815101839052608084015160a085015161425e919085613d0d565b8151529392505050565b6142706145c1565b805194909452835160209081019390935282840180519290925290519091015290565b60006142a084848461445b565b156142b3576142b3610a6c85858561420c565b610b6b8361224e61223282600163ffffffff611bd116565b60008385106142d75750825b6040516060907fa3b4a3270000000000000000000000000000000000000000000000000000000090614311908690869089906024016153a2565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050600060608873ffffffffffffffffffffffffffffffffffffffff16848460405161439a919061530d565b60006040518083038185875af1925050503d80600081146143d7576040519150601f19603f3d011682016040523d82523d6000602084013e6143dc565b606091505b5091509150816143f6576143f6610a6c8b898989866144bf565b5050509695505050505050565b6060635bd0428d60e01b858585856040516024016122fa94939291906153d3565b60408051808201909152600481527fa791837c00000000000000000000000000000000000000000000000000000000602082015290565b60008261446d5761446d610a6c614424565b811580614478575083155b1561448557506000610966565b6000838061448f57fe5b8584099050836144a5818363ffffffff611bd116565b816144ac57fe5b0690506141ef858463ffffffff612fac16565b60606387cb1e7560e01b86868686866040516024016144e29594939291906155b1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905095945050505050565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6040518060800160405280606081526020016060815260200160008152602001600081525090565b60405180608001604052806145d461456a565b81526020016145e161456a565b815260200160008152602001600081525090565b6040805160608101909152806000815260006020820181905260409091015290565b604051806101c00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001606081525090565b803573ffffffffffffffffffffffffffffffffffffffff811681146107f557600080fd5b600082601f830112614712578081fd5b813561472561472082615b1d565b615af6565b81815291506020808301908481018184028601820187101561474657600080fd5b60005b8481101561476d5761475b88836146de565b84529282019290820190600101614749565b505050505092915050565b600082601f830112614788578081fd5b813561479661472082615b1d565b8181529150602080830190840160005b838110156147d3576147be8760208435890101614896565b835260209283019291909101906001016147a6565b5050505092915050565b600082601f8301126147ed578081fd5b81356147fb61472082615b1d565b8181529150602080830190840160005b838110156147d357614823876020843589010161491d565b8352602092830192919091019060010161480b565b600082601f830112614848578081fd5b813561485661472082615b1d565b81815291506020808301908481018184028601820187101561487757600080fd5b60005b8481101561476d5781358452928201929082019060010161487a565b600082601f8301126148a6578081fd5b813567ffffffffffffffff8111156148bc578182fd5b6148ed60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615af6565b915080825283602082850101111561490457600080fd5b8060208401602084013760009082016020015292915050565b60006101c0808385031215614930578182fd5b61493981615af6565b91505061494683836146de565b815261495583602084016146de565b602082015261496783604084016146de565b604082015261497983606084016146de565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e08201526101008083013581830152506101208083013581830152506101408083013567ffffffffffffffff808211156149db57600080fd5b6149e786838701614896565b83850152610160925082850135915080821115614a0357600080fd5b614a0f86838701614896565b83850152610180925082850135915080821115614a2b57600080fd5b614a3786838701614896565b838501526101a0925082850135915080821115614a5357600080fd5b50614a6085828601614896565b82840152505092915050565b600060a08284031215614a7d578081fd5b614a8760a0615af6565b90508135815260208201356020820152604082013560408201526060820135614aaf81615b91565b6060820152608082013567ffffffffffffffff811115614ace57600080fd5b614ada84828501614896565b60808301525092915050565b600060208284031215614af7578081fd5b61096683836146de565b60008060408385031215614b13578081fd5b614b1d84846146de565b9150614b2c84602085016146de565b90509250929050565b60008060408385031215614b47578182fd5b614b5184846146de565b915060208301358015158114614b65578182fd5b809150509250929050565b60008060008060808587031215614b85578182fd5b843567ffffffffffffffff80821115614b9c578384fd5b614ba888838901614778565b95506020870135915080821115614bbd578384fd5b614bc988838901614702565b94506040870135915080821115614bde578384fd5b614bea88838901614702565b93506060870135915080821115614bff578283fd5b50614c0c87828801614838565b91505092959194509250565b600060208284031215614c29578081fd5b813567ffffffffffffffff811115614c3f578182fd5b610b6b848285016147dd565b60008060008060808587031215614c60578182fd5b843567ffffffffffffffff80821115614c77578384fd5b614c83888389016147dd565b95506020870135915080821115614c98578384fd5b614ca4888389016147dd565b94506040870135915080821115614cb9578384fd5b614cc588838901614778565b93506060870135915080821115614cda578283fd5b50614c0c87828801614778565b600080600060608486031215614cfb578081fd5b833567ffffffffffffffff80821115614d12578283fd5b614d1e878388016147dd565b94506020860135915080821115614d33578283fd5b614d3f87838801614838565b93506040860135915080821115614d54578283fd5b50614d6186828701614778565b9150509250925092565b600080600060608486031215614d7f578081fd5b833567ffffffffffffffff80821115614d96578283fd5b614da2878388016147dd565b9450602086013593506040860135915080821115614d54578283fd5b60008060408385031215614dd0578182fd5b823567ffffffffffffffff80821115614de7578384fd5b81850186601f820112614df8578485fd5b80359250614e0861472084615b1d565b83815260208082019190838101885b87811015614e4057614e2e8c848435890101614a6c565b85529382019390820190600101614e17565b50919750880135945050505080821115614e58578283fd5b50614e6585828601614778565b9150509250929050565b600060208284031215614e80578081fd5b5035919050565b60008060408385031215614e99578182fd5b823591506020830135614b6581615b91565b600080600060608486031215614ebf578081fd5b833592506020840135614ed181615b91565b9150604084013567ffffffffffffffff811115614eec578182fd5b614d6186828701614896565b600060208284031215614f09578081fd5b813561096681615bb3565b600060208284031215614f25578081fd5b815161096681615bb3565b600060a08284031215614f41578081fd5b614f4b60a0615af6565b82518152602083015160208201526040830151604082015260608301516060820152608083015160808201528091505092915050565b600060208284031215614f92578081fd5b813567ffffffffffffffff811115614fa8578182fd5b610b6b8482850161491d565b60008060408385031215614fc6578182fd5b823567ffffffffffffffff80821115614fdd578384fd5b614fe98683870161491d565b93506020850135915080821115614ffe578283fd5b50614e6585828601614896565b60008060008060808587031215615020578182fd5b843567ffffffffffffffff80821115615037578384fd5b6150438883890161491d565b95506020870135915080821115615058578384fd5b6150648883890161491d565b94506040870135915080821115615079578384fd5b61508588838901614896565b9350606087013591508082111561509a578283fd5b50614c0c87828801614896565b6000806000606084860312156150bb578081fd5b833567ffffffffffffffff808211156150d2578283fd5b6150de8783880161491d565b94506020860135935060408601359150808211156150fa578283fd5b50614d6186828701614896565b60008060408385031215615119578182fd5b823567ffffffffffffffff80821115615130578384fd5b614fe986838701614a6c565b73ffffffffffffffffffffffffffffffffffffffff169052565b6000815180845260208401935060208301825b828110156151925761517c8683516151e6565b60a0959095019460209190910190600101615169565b5093949350505050565b600081518084526151b4816020860160208601615b3d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b80518252602081015160208301526040810151604083015260608101516060830152608081015160808301525050565b60006101c061522684845161513c565b6020830151615238602086018261513c565b50604083015161524b604086018261513c565b50606083015161525e606086018261513c565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e08501526101008084015181860152506101208084015181860152506101408084015182828701526152b78387018261519c565b915050610160915081840151858203838701526152d4828261519c565b9250505061018080840151858303828701526152f0838261519c565b9150506101a091508184015185820383870152613e09828261519c565b6000825161531f818460208701615b3d565b9190910192915050565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b600073ffffffffffffffffffffffffffffffffffffffff8616825260806020830152615402608083018661519c565b8281036040840152615414818661519c565b8381036060850152615426818661519c565b98975050505050505050565b6000602080830181845280855180835260408601915060408482028701019250838701855b828110156154a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261549185835161519c565b94509285019290850190600101615457565b5092979650505050505050565b6000602082526109666020830184615156565b901515815260200190565b90815260200190565b91825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b600085825273ffffffffffffffffffffffffffffffffffffffff8516602083015260806040830152615530608083018561519c565b8281036060840152613940818561519c565b918252602082015260400190565b600083825260406020830152610b6b604083018461519c565b600084825260606020830152615582606083018561519c565b8281036040840152613e09818561519c565b828152604081016155a483615b87565b8260208301529392505050565b600086825285602083015273ffffffffffffffffffffffffffffffffffffffff808616604084015280851660608401525060a0608083015261394060a083018461519c565b9283526020830191909152604082015260600190565b93845260ff9290921660208401526040830152606082015260800190565b7fffffffff0000000000000000000000000000000000000000000000000000000091909116815260200190565b7fffffffff0000000000000000000000000000000000000000000000000000000092909216825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b600060208252610966602083018461519c565b6000608082526156c5608083018761519c565b73ffffffffffffffffffffffffffffffffffffffff95861660208401529390941660408201526060015292915050565b600060408252615708604083018561519c565b8281036020840152610e1a818561519c565b60006060825261572d606083018661519c565b828103602084015261573f818661519c565b91505073ffffffffffffffffffffffffffffffffffffffff83166040830152949350505050565b600061016080835261577a8184018f61519c565b838103602085015261578c818f61519c565b91505082810360408401526157a1818d61519c565b83810360608501526157b3818d61519c565b73ffffffffffffffffffffffffffffffffffffffff9b8c16608086015299909a1660a0840152505060c081019590955260e08501939093526101008401919091526101208301526101409091015295945050505050565b600061581585615b69565b84825283602083015260606040830152610e1a606083018461519c565b6020810161583f83615b73565b91905290565b6060810161585285615b73565b938152602081019290925260409091015290565b6060810161587385615b7d565b938152602081019290925273ffffffffffffffffffffffffffffffffffffffff1660409091015290565b6060810161585285615b7d565b606081016008851061585257fe5b60006158c386615b87565b85825284602083015273ffffffffffffffffffffffffffffffffffffffff8416604083015260806060830152613e09608083018461519c565b6040810161590984615b69565b9281526020015290565b60208082526014908201527f5452414e53464552535f5355434345535346554c000000000000000000000000604082015260600190565b60006020825282516080602084015261596660a0840182615156565b602085015191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08482030160408501526159a18183615156565b604086015160608601526060860151608086015280935050505092915050565b60a081016107f582846151e6565b6000610180820190506159e38284516151e6565b60208301516159f560a08401826151e6565b5060408301516101408301526060909201516101609091015290565b81516060820190615a2181615b87565b80835250602083015160208301526040830151604083015292915050565b600060408252615a526040830185615216565b90508260208301529392505050565b600060608252615a746060830186615216565b8460208401528281036040840152613e09818561519c565b60006040825283516040830152602084015160608301526040840151608083015273ffffffffffffffffffffffffffffffffffffffff60608501511660a0830152608084015160a060c0840152615ae660e084018261519c565b9150508260208301529392505050565b60405181810167ffffffffffffffff81118282101715615b1557600080fd5b604052919050565b600067ffffffffffffffff821115615b33578081fd5b5060209081020190565b60005b83811015615b58578181015183820152602001615b40565b838111156133785750506000910152565b6002811061084357fe5b6004811061084357fe5b6003811061084357fe5b6007811061084357fe5b73ffffffffffffffffffffffffffffffffffffffff8116811461084357600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008116811461084357600080fd5b8351602094850120835193850193909320604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f815295860194909452928401929092526060830152608082015260a090209056fea365627a7a72315820897f450a05992000843ffc258f91408c60af4df0c5e254daaee4892d72aa3da26c6578706572696d656e74616cf564736f6c63430005100040" } } }, "compiler": { "name": "solc", - "version": "soljson-v0.5.12+commit.7709ece9.js", + "version": "soljson-v0.5.16+commit.9c3226ce.js", "settings": { "optimizer": { "enabled": true, @@ -1572,8 +1599,8 @@ ] } }, - "evmVersion": "constantinople" + "evmVersion": "istanbul" } }, - "networks": {} + "chains": {} } diff --git a/packages/contract-artifacts/artifacts/Forwarder.json b/packages/contract-artifacts/artifacts/Forwarder.json index c3bef388e3..ef9aa6fc45 100644 --- a/packages/contract-artifacts/artifacts/Forwarder.json +++ b/packages/contract-artifacts/artifacts/Forwarder.json @@ -6,6 +6,7 @@ { "inputs": [ { "internalType": "address", "name": "_exchange", "type": "address" }, + { "internalType": "address", "name": "_exchangeV2", "type": "address" }, { "internalType": "address", "name": "_weth", "type": "address" } ], "payable": false, @@ -22,6 +23,15 @@ "type": "event" }, { "payable": true, "stateMutability": "payable", "type": "fallback" }, + { + "constant": true, + "inputs": [], + "name": "EXCHANGE_V2_ORDER_ID", + "outputs": [{ "internalType": "bytes4", "name": "", "type": "bytes4" }], + "payable": false, + "stateMutability": "view", + "type": "function" + }, { "constant": false, "inputs": [{ "internalType": "bytes", "name": "assetData", "type": "bytes" }], @@ -57,14 +67,13 @@ }, { "internalType": "uint256", "name": "makerAssetBuyAmount", "type": "uint256" }, { "internalType": "bytes[]", "name": "signatures", "type": "bytes[]" }, - { "internalType": "uint256", "name": "feePercentage", "type": "uint256" }, - { "internalType": "address payable", "name": "feeRecipient", "type": "address" } + { "internalType": "uint256[]", "name": "ethFeeAmounts", "type": "uint256[]" }, + { "internalType": "address payable[]", "name": "feeRecipients", "type": "address[]" } ], "name": "marketBuyOrdersWithEth", "outputs": [ { "internalType": "uint256", "name": "wethSpentAmount", "type": "uint256" }, - { "internalType": "uint256", "name": "makerAssetAcquiredAmount", "type": "uint256" }, - { "internalType": "uint256", "name": "ethFeePaid", "type": "uint256" } + { "internalType": "uint256", "name": "makerAssetAcquiredAmount", "type": "uint256" } ], "payable": true, "stateMutability": "payable", @@ -95,14 +104,13 @@ "type": "tuple[]" }, { "internalType": "bytes[]", "name": "signatures", "type": "bytes[]" }, - { "internalType": "uint256", "name": "feePercentage", "type": "uint256" }, - { "internalType": "address payable", "name": "feeRecipient", "type": "address" } + { "internalType": "uint256[]", "name": "ethFeeAmounts", "type": "uint256[]" }, + { "internalType": "address payable[]", "name": "feeRecipients", "type": "address[]" } ], "name": "marketSellOrdersWithEth", "outputs": [ { "internalType": "uint256", "name": "wethSpentAmount", "type": "uint256" }, - { "internalType": "uint256", "name": "makerAssetAcquiredAmount", "type": "uint256" }, - { "internalType": "uint256", "name": "ethFeePaid", "type": "uint256" } + { "internalType": "uint256", "name": "makerAssetAcquiredAmount", "type": "uint256" } ], "payable": true, "stateMutability": "payable", @@ -145,26 +153,30 @@ "details": "Approves the respective proxy for a given asset to transfer tokens on the Forwarder contract's behalf. This is necessary because an order fee denominated in the maker asset (i.e. a percentage fee) is sent by the Forwarder contract to the fee recipient. This method needs to be called before forwarding orders of a maker asset that hasn't previously been approved.", "params": { "assetData": "Byte array encoded for the respective asset proxy." } }, - "marketBuyOrdersWithEth((address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,bytes,bytes)[],uint256,bytes[],uint256,address)": { + "marketBuyOrdersWithEth((address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,bytes,bytes)[],uint256,bytes[],uint256[],address[])": { "details": "Attempt to buy makerAssetBuyAmount of makerAsset by selling ETH provided with transaction. The Forwarder may *fill* more than makerAssetBuyAmount of the makerAsset so that it can pay takerFees where takerFeeAssetData == makerAssetData (i.e. percentage fees). Any ETH not spent will be refunded to sender.", "params": { - "feePercentage": "Percentage of WETH sold that will payed as fee to forwarding contract feeRecipient.", - "feeRecipient": "Address that will receive ETH when orders are filled.", + "ethFeeAmounts": "Amounts of ETH, denominated in Wei, that are paid to corresponding feeRecipients.", + "feeRecipients": "Addresses that will receive ETH when orders are filled.", "makerAssetBuyAmount": "Desired amount of makerAsset to purchase.", "orders": "Array of order specifications used containing desired makerAsset and WETH as takerAsset.", "signatures": "Proofs that orders have been created by makers." }, - "return": "wethSpentAmount Amount of WETH spent on the given set of orders.makerAssetAcquiredAmount Amount of maker asset acquired from the given set of orders.ethFeePaid Amount of ETH spent on the given forwarder fee." + "return": "wethSpentAmount Amount of WETH spent on the given set of orders.makerAssetAcquiredAmount Amount of maker asset acquired from the given set of orders." }, - "marketSellOrdersWithEth((address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,bytes,bytes)[],bytes[],uint256,address)": { + "marketSellOrdersWithEth((address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,bytes,bytes)[],bytes[],uint256[],address[])": { "details": "Purchases as much of orders' makerAssets as possible by selling as much of the ETH value sent as possible, accounting for order and forwarder fees.", "params": { - "feePercentage": "Percentage of WETH sold that will payed as fee to forwarding contract feeRecipient.", - "feeRecipient": "Address that will receive ETH when orders are filled.", + "ethFeeAmounts": "Amounts of ETH, denominated in Wei, that are paid to corresponding feeRecipients.", + "feeRecipients": "Addresses that will receive ETH when orders are filled.", "orders": "Array of order specifications used containing desired makerAsset and WETH as takerAsset.", "signatures": "Proofs that orders have been created by makers." }, - "return": "wethSpentAmount Amount of WETH spent on the given set of orders.makerAssetAcquiredAmount Amount of maker asset acquired from the given set of orders.ethFeePaid Amount of ETH spent on the given forwarder fee." + "return": "wethSpentAmount Amount of WETH spent on the given set of orders.makerAssetAcquiredAmount Amount of maker asset acquired from the given set of orders." + }, + "transferOwnership(address)": { + "details": "Change the owner of this contract.", + "params": { "newOwner": "New owner address." } }, "withdrawAsset(bytes,uint256)": { "details": "Withdraws assets from this contract. It may be used by the owner to withdraw assets that were accidentally sent to this contract.", @@ -177,16 +189,16 @@ }, "evm": { "bytecode": { - "object": "0x60806040523480156200001157600080fd5b5060405162002b2538038062002b258339810160408190526200003491620003dd565b60008054336001600160a01b03199182161782556001805482166001600160a01b03868116919091179182905560028054909316858216179092556040517f60704108000000000000000000000000000000000000000000000000000000008152911690636070410890620000ce907ff47261b0000000000000000000000000000000000000000000000000000000009060040162000456565b60206040518083038186803b158015620000e757600080fd5b505afa158015620000fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620001229190810190620003ad565b90506001600160a01b0381166200015d576200015d6200014c6200036060201b620005dc1760201c565b620003a560201b620001f61760201c565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063095ea7b390620001ac908490600019906004016200043d565b602060405180830381600087803b158015620001c757600080fd5b505af1158015620001dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506200020291908101906200041b565b50600154604080517f850a150100000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163850a1501916004808301926020929190829003018186803b1580156200026257600080fd5b505afa15801562000277573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506200029d9190810190620003ad565b90506001600160a01b0381161562000356576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063095ea7b390620002fe908490600019906004016200043d565b602060405180830381600087803b1580156200031957600080fd5b505af11580156200032e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506200035491908101906200041b565b505b505050506200049c565b6040805160048152602481019091526020810180516001600160e01b03167ff3b96b8d0000000000000000000000000000000000000000000000000000000017905290565b805160208201fd5b600060208284031215620003bf578081fd5b81516001600160a01b0381168114620003d6578182fd5b9392505050565b60008060408385031215620003f0578081fd5b8251620003fd8162000483565b6020840151909250620004108162000483565b809150509250929050565b6000602082840312156200042d578081fd5b81518015158114620003d6578182fd5b6001600160a01b03929092168252602082015260400190565b7fffffffff0000000000000000000000000000000000000000000000000000000091909116815260200190565b6001600160a01b03811681146200049957600080fd5b50565b61267980620004ac6000396000f3fe6080604052600436106100655760003560e01c8063942d33c011610043578063942d33c014610102578063ae93b97a14610124578063f2fde38b1461013757610065565b8063442026ed14610097578063630f1e6c146100b75780638da5cb5b146100d7575b60025473ffffffffffffffffffffffffffffffffffffffff1633146100955761009561009033610157565b6101f6565b005b3480156100a357600080fd5b506100956100b2366004612191565b6101fe565b3480156100c357600080fd5b506100956100d23660046121d1565b6103e8565b3480156100e357600080fd5b506100ec610436565b6040516100f99190612304565b60405180910390f35b610115610110366004612108565b610452565b6040516100f99392919061258b565b61011561013236600461208b565b610487565b34801561014357600080fd5b50610095610152366004612053565b6104e2565b60606308b1869860e01b826040516024016101729190612304565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050919050565b805160208201fd5b600061024a600084848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff610586169050565b90507ff47261b0000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082168114156103e2576001546040517f6070410800000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906360704108906102ee9085906004016123a3565b60206040518083038186803b15801561030657600080fd5b505afa15801561031a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061033e919081019061206f565b905073ffffffffffffffffffffffffffffffffffffffff8116610366576103666100906105dc565b60006103b2601087878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff610636169050565b90506103df81837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610676565b50505b50505050565b6103f0610737565b61043183838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250859250610780915050565b505050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b600080600061045f610899565b61046a88888861092e565b909350915061047a838686610cb8565b9050955095509592505050565b6000806000610494610899565b60006104b8670de0b6b3a76400006104b2888263ffffffff610e5716565b34610e7a565b90506104c5888289610ea4565b90945092506104d5848787610cb8565b9150509450945094915050565b6104ea610737565b73ffffffffffffffffffffffffffffffffffffffff81166105155761051061009061128f565b610583565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35b50565b600081600401835110156105a7576105a761009060038551856004016112c6565b5060208183018101519101907fffffffff00000000000000000000000000000000000000000000000000000000165b92915050565b6040805160048152602481019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff3b96b8d0000000000000000000000000000000000000000000000000000000017905290565b600081601401835110156106575761065761009060048551856014016112c6565b50016014015173ffffffffffffffffffffffffffffffffffffffff1690565b6040516060907f095ea7b300000000000000000000000000000000000000000000000000000000906106ae908590859060240161237d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290506103e2848261136b565b60005473ffffffffffffffffffffffffffffffffffffffff16331461077e5760005461077e9061009090339073ffffffffffffffffffffffffffffffffffffffff16611427565b565b6000610792838263ffffffff61058616565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167ff47261b000000000000000000000000000000000000000000000000000000000148061082557507fffffffff0000000000000000000000000000000000000000000000000000000081167fdc1600f300000000000000000000000000000000000000000000000000000000145b156108395761083483836114c9565b610431565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f0257179200000000000000000000000000000000000000000000000000000000141561088d5761083483836114e9565b610431610090826115b6565b346108a9576108a96100906115d1565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561091357600080fd5b505af1158015610927573d6000803e3d6000fd5b5050505050565b825160009081907fdc1600f30000000000000000000000000000000000000000000000000000000090825b818114610c985787818151811061096c57fe5b6020026020010151608001516000148061099d575087818151811061098d57fe5b602002602001015160a001516000145b156109a757610c90565b60006109b9888663ffffffff61162b16565b905060006109e960008b85815181106109ce57fe5b6020026020010151610140015161058690919063ffffffff16565b90506000807fffffffff000000000000000000000000000000000000000000000000000000008084169088161415610aef57610a4760108d8781518110610a2c57fe5b6020026020010151610140015161063690919063ffffffff16565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815290925073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190610a9c903090600401612304565b60206040518083038186803b158015610ab457600080fd5b505afa158015610ac8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610aec919081019061226c565b90505b600080610b238e8881518110610b0157fe5b60200260200101518d8981518110610b1557fe5b60200260200101518861164a565b91509150887bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161415610c31576040517f70a0823100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff8616906370a0823190610bc2903090600401612304565b60206040518083038186803b158015610bda57600080fd5b505afa158015610bee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c12919081019061226c565b9050610c2d610c27828663ffffffff61162b16565b8361178f565b9150505b610c538e8881518110610c4057fe5b6020026020010151610140015182610780565b610c638b8363ffffffff610e5716565b9a50610c758a8263ffffffff610e5716565b99508c8a10610c8957505050505050610c98565b5050505050505b600101610959565b5085831015610cae57610cae61009087856117a6565b5050935093915050565b600066b1a2bc2ec50000831115610cd557610cd5610090846117c3565b34841115610cea57610cea61009085346117de565b6000610cfc348663ffffffff61162b16565b9050610d1184670de0b6b3a764000087610e7a565b915080821115610d2857610d2861009083836117fb565b8015610e4f576002546040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690632e1a7d4d90610d84908490600401612574565b600060405180830381600087803b158015610d9e57600080fd5b505af1158015610db2573d6000803e3d6000fd5b505050506000821115610e045760405173ffffffffffffffffffffffffffffffffffffffff84169083156108fc029084906000818181858888f19350505050158015610e02573d6000803e3d6000fd5b505b6000610e16828463ffffffff61162b16565b90508015610e4d57604051339082156108fc029083906000818181858888f19350505050158015610e4b573d6000803e3d6000fd5b505b505b509392505050565b600082820183811015610e7357610e7361009060008686611818565b9392505050565b6000610e9c83610e90868563ffffffff61183716565b9063ffffffff61186816565b949350505050565b6000806000610f59600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631ce4c78b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f1457600080fd5b505afa158015610f28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f4c919081019061226c565b3a9063ffffffff61183716565b86519091507fdc1600f3000000000000000000000000000000000000000000000000000000009060005b81811461128357888181518110610f9657fe5b60200260200101516080015160001480610fc75750888181518110610fb757fe5b602002602001015160a001516000145b15610fd15761127b565b6000610ff385610fe78b8a63ffffffff61162b16565b9063ffffffff61162b16565b9050600061100860008c85815181106109ce57fe5b90506000807fffffffff0000000000000000000000000000000000000000000000000000000080841690881614156110f35761104b60108e8781518110610a2c57fe5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815290925073ffffffffffffffffffffffffffffffffffffffff8316906370a08231906110a0903090600401612304565b60206040518083038186803b1580156110b857600080fd5b505afa1580156110cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110f0919081019061226c565b90505b6000806111278f888151811061110557fe5b60200260200101518e898151811061111957fe5b602002602001015188611892565b91509150887bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916141561122f576040517f70a0823100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff8616906370a08231906111c6903090600401612304565b60206040518083038186803b1580156111de57600080fd5b505afa1580156111f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611216919081019061226c565b905061122b610c27828663ffffffff61162b16565b9150505b61123e8f8881518110610c4057fe5b61124e8c8363ffffffff610e5716565b9b506112608b8263ffffffff610e5716565b9a508d8c1061127457505050505050611283565b5050505050505b600101610f83565b50505050935093915050565b60408051808201909152600481527fe69edc3e00000000000000000000000000000000000000000000000000000000602082015290565b6060632800659560e01b8484846040516024016112e593929190612405565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290509392505050565b600060608373ffffffffffffffffffffffffffffffffffffffff168360405161139491906122e8565b6000604051808303816000865af19150503d80600081146113d1576040519150601f19603f3d011682016040523d82523d6000602084013e6113d6565b606091505b5091509150811561141a5780516113ee575050611423565b80516020141561141a576000611405826000611949565b9050806001141561141857505050611423565b505b6103e2816101f6565b5050565b6060631de45ad160e01b8383604051602401611444929190612325565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905092915050565b60006114dc83601063ffffffff61063616565b9050610431813384611955565b806001146114fd576114fd6100908261198d565b600061151083601063ffffffff61063616565b9050600061152584602463ffffffff61194916565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd9061157e9030903390869060040161234c565b600060405180830381600087803b15801561159857600080fd5b505af11580156115ac573d6000803e3d6000fd5b5050505050505050565b6060637996a27160e01b8260405160240161017291906123a3565b6040805160048152602481019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8c0e562b0000000000000000000000000000000000000000000000000000000017905290565b6000828211156116445761164461009060028585611818565b50900390565b6000808460e001516000148061166f575061166f856101a001518661016001516119a8565b156116dd5760006116898660a00151876080015186611b47565b9050611693611d23565b61169e878388611b71565b90506116cf81608001516116c383606001518460200151610e5790919063ffffffff16565b9063ffffffff610e5716565b905190935091506117879050565b6116f1856101a001518661014001516119a8565b156117765760006117218660a0015161171b8860e00151896080015161162b90919063ffffffff16565b86611b47565b905061172b611d23565b611736878388611b71565b905061175381608001518260200151610e5790919063ffffffff16565b6060820151825191955061176d919063ffffffff61162b16565b92505050611787565b611787610090866101a00151611cde565b935093915050565b60008183101561179f5781610e73565b5090919050565b60606391353a0c60e01b838360405160240161144492919061257d565b6060631174fb8060e01b826040516024016101729190612574565b606063cdcbed5d60e01b838360405160240161144492919061257d565b606063ecf40fd960e01b838360405160240161144492919061257d565b606063e946c1bb60e01b8484846040516024016112e5939291906123e3565b600082611846575060006105d6565b8282028284828161185357fe5b0414610e7357610e7361009060018686611818565b60008161187e5761187e61009060038585611818565b600082848161188957fe5b04949350505050565b6000808460e00151600014806118b757506118b7856101a001518661014001516119a8565b1561190e576118c4611d23565b6118cf868587611b71565b90506118ec81608001518260200151610e5790919063ffffffff16565b60608201518251919450611906919063ffffffff61162b16565b915050611787565b611922856101a001518661016001516119a8565b156117765760a085015160e08601516000916116899161171b90829063ffffffff610e5716565b6000610e738383611cf9565b6040516060907fa9059cbb00000000000000000000000000000000000000000000000000000000906106ae908590859060240161237d565b606063baffa47460e01b826040516024016101729190612574565b6000806119bb848263ffffffff61058616565b905060006119cf848263ffffffff61058616565b90507ff47261b0000000000000000000000000000000000000000000000000000000007fdc1600f3000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008416821480611a6757507fffffffff00000000000000000000000000000000000000000000000000000000848116908216145b8015611ac557507fffffffff000000000000000000000000000000000000000000000000000000008381169083161480611ac557507fffffffff00000000000000000000000000000000000000000000000000000000838116908216145b15611b30576000611add88601063ffffffff61063616565b90506000611af288601063ffffffff61063616565b90508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161496505050505050506105d6565b60009450505050506105d6565b5050505092915050565b6000610e9c83610e90611b6182600163ffffffff61162b16565b6116c3888763ffffffff61183716565b611b79611d23565b6040516060907f9b44d5560000000000000000000000000000000000000000000000000000000090611bb390879087908790602401612413565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252600154915190925073ffffffffffffffffffffffffffffffffffffffff909116906000906060908390611c649086906122e8565b6000604051808303816000865af19150503d8060008114611ca1576040519150601f19603f3d011682016040523d82523d6000602084013e611ca6565b606091505b50915091508115611cd357805160a014611cbc57fe5b80806020019051611cd0919081019061221b565b94505b505050509392505050565b60606331360af160e01b8260405160240161017291906123d0565b60008160200183511015611d1a57611d1a61009060058551856020016112c6565b50016020015190565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b80356105d681612614565b600082601f830112611d6d578081fd5b8135611d80611d7b826125c8565b6125a1565b8181529150602080830190840160005b83811015611b3d57611da88760208435890101611fcc565b83526020928301929190910190600101611d90565b600082601f830112611dcd578081fd5b8135611ddb611d7b826125c8565b818152915060208083019084810160005b84811015611f7a57813587016101c0807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0838c03011215611e2c57600080fd5b611e35816125a1565b611e418b878501611d52565b8152611e508b60408501611d52565b86820152611e618b60608501611d52565b6040820152611e738b60808501611d52565b606082015260a0830135608082015260c083013560a082015260e083013560c08201526101008084013560e0830152610120808501358284015261014091508185013581840152506101608085013567ffffffffffffffff80821115611ed857600080fd5b611ee68f8b848a0101611fcc565b84860152610180935083870135915080821115611f0257600080fd5b611f108f8b848a0101611fcc565b838601526101a0925082870135915080821115611f2c57600080fd5b611f3a8f8b848a0101611fcc565b8486015285870135935080841115611f5157600080fd5b5050611f618d8984880101611fcc565b9083015250865250509282019290820190600101611dec565b505050505092915050565b60008083601f840112611f96578182fd5b50813567ffffffffffffffff811115611fad578182fd5b602083019150836020828501011115611fc557600080fd5b9250929050565b600082601f830112611fdc578081fd5b813567ffffffffffffffff811115611ff2578182fd5b61202360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016125a1565b915080825283602082850101111561203a57600080fd5b8060208401602084013760009082016020015292915050565b600060208284031215612064578081fd5b8135610e7381612614565b600060208284031215612080578081fd5b8151610e7381612614565b600080600080608085870312156120a0578283fd5b843567ffffffffffffffff808211156120b7578485fd5b6120c388838901611dbd565b955060208701359150808211156120d8578485fd5b506120e587828801611d5d565b9350506040850135915060608501356120fd81612614565b939692955090935050565b600080600080600060a0868803121561211f578081fd5b853567ffffffffffffffff80821115612136578283fd5b61214289838a01611dbd565b965060208801359550604088013591508082111561215e578283fd5b5061216b88828901611d5d565b93505060608601359150608086013561218381612614565b809150509295509295909350565b600080602083850312156121a3578182fd5b823567ffffffffffffffff8111156121b9578283fd5b6121c585828601611f85565b90969095509350505050565b6000806000604084860312156121e5578283fd5b833567ffffffffffffffff8111156121fb578384fd5b61220786828701611f85565b909790965060209590950135949350505050565b600060a0828403121561222c578081fd5b61223660a06125a1565b82518152602083015160208201526040830151604082015260608301516060820152608083015160808201528091505092915050565b60006020828403121561227d578081fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff169052565b600081518084526122b68160208601602086016125e8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600082516122fa8184602087016125e8565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b7fffffffff0000000000000000000000000000000000000000000000000000000091909116815260200190565b600060208252610e73602083018461229e565b60608101600485106123f157fe5b938152602081019290925260409091015290565b60608101600885106123f157fe5b600060608252612427606083018651612284565b60208501516124396080840182612284565b50604085015161244c60a0840182612284565b50606085015161245f60c0840182612284565b50608085015160e083015260a0850151610100818185015260c08701519150610120828186015260e0880151925061014083818701528289015193506101609250838387015281890151935061018091508382870152808901519350506101c06101a081818801526124d561022088018661229e565b848b015195507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa09450848882030183890152612511818761229e565b925050828a0151945083878303016101e088015261252f828661229e565b9250808a015194505050818582030161020086015261254e818461229e565b9150508560208501528381036040850152612569818661229e565b979650505050505050565b90815260200190565b918252602082015260400190565b9283526020830191909152604082015260600190565b60405181810167ffffffffffffffff811182821017156125c057600080fd5b604052919050565b600067ffffffffffffffff8211156125de578081fd5b5060209081020190565b60005b838110156126035781810151838201526020016125eb565b838111156103e25750506000910152565b73ffffffffffffffffffffffffffffffffffffffff8116811461058357600080fdfea365627a7a723158206b46b28e3e02b6a8f8e2d3f8301ffac3b31c4d183245d9faedf1b2973ea8db6b6c6578706572696d656e74616cf564736f6c634300050d0040" + "object": "0x60806040523480156200001157600080fd5b506040516200345438038062003454833981016040819052620000349162000354565b60008054336001600160a01b03199182161782556001805482166001600160a01b0387811691909117918290556002805484168783161790556003805490931685821617909255604051630c0e082160e31b8152911690636070410890620000a890630f47261b60e41b90600401620003e2565b60206040518083038186803b158015620000c157600080fd5b505afa158015620000d6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620000fc919081019062000324565b90506001600160a01b03811662000137576200013762000126620002f060201b620006071760201c565b6200031c60201b620002221760201c565b60035460405163095ea7b360e01b81526001600160a01b039091169063095ea7b3906200016d90849060001990600401620003c9565b602060405180830381600087803b1580156200018857600080fd5b505af11580156200019d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620001c39190810190620003a7565b506001546040805163850a150160e01b815290516000926001600160a01b03169163850a1501916004808301926020929190829003018186803b1580156200020a57600080fd5b505afa1580156200021f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525062000245919081019062000324565b90506001600160a01b03811615620002e55760035460405163095ea7b360e01b81526001600160a01b039091169063095ea7b3906200028d90849060001990600401620003c9565b602060405180830381600087803b158015620002a857600080fd5b505af1158015620002bd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620002e39190810190620003a7565b505b505050505062000410565b6040805160048152602481019091526020810180516001600160e01b031663f3b96b8d60e01b17905290565b805160208201fd5b60006020828403121562000336578081fd5b81516001600160a01b03811681146200034d578182fd5b9392505050565b60008060006060848603121562000369578182fd5b83516200037681620003f7565b60208501519093506200038981620003f7565b60408501519092506200039c81620003f7565b809150509250925092565b600060208284031215620003b9578081fd5b815180151581146200034d578182fd5b6001600160a01b03929092168252602082015260400190565b6001600160e01b031991909116815260200190565b6001600160a01b03811681146200040d57600080fd5b50565b61303480620004206000396000f3fe6080604052600436106100705760003560e01c8063907e5cc31161004e578063907e5cc31461010d5780639e8323151461012e578063e196001b14610141578063f2fde38b1461016357610070565b8063442026ed146100a2578063630f1e6c146100c25780638da5cb5b146100e2575b60035473ffffffffffffffffffffffffffffffffffffffff1633146100a0576100a061009b33610183565b610222565b005b3480156100ae57600080fd5b506100a06100bd366004612a03565b61022a565b3480156100ce57600080fd5b506100a06100dd366004612a43565b610414565b3480156100ee57600080fd5b506100f7610462565b6040516101049190612b99565b60405180910390f35b61012061011b3660046127ef565b61047e565b604051610104929190612f0c565b61012061013c366004612897565b6104b3565b34801561014d57600080fd5b506101566104e9565b6040516101049190612c38565b34801561016f57600080fd5b506100a061017e3660046127b7565b61050d565b60606308b1869860e01b8260405160240161019e9190612b99565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050919050565b805160208201fd5b6000610276600084848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff6105b1169050565b90507ff47261b0000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821681141561040e576001546040517f6070410800000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff169063607041089061031a908590600401612c38565b60206040518083038186803b15801561033257600080fd5b505afa158015610346573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061036a91908101906127d3565b905073ffffffffffffffffffffffffffffffffffffffff81166103925761039261009b610607565b60006103de601087878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff610661169050565b905061040b81837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6106a1565b50505b50505050565b61041c610762565b61045d83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508592506107ab915050565b505050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b600080600061048d858561096f565b905061049a878288610ac5565b90935091506104a98184610f27565b5094509492505050565b60008060006104c2858561096f565b90506104cf88888861100b565b90935091506104de8184610f27565b509550959350505050565b7f770501f80000000000000000000000000000000000000000000000000000000081565b610515610762565b73ffffffffffffffffffffffffffffffffffffffff81166105405761053b61009b611346565b6105ae565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35b50565b600081600401835110156105d2576105d261009b600385518560040161137d565b5060208183018101519101907fffffffff00000000000000000000000000000000000000000000000000000000165b92915050565b6040805160048152602481019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff3b96b8d0000000000000000000000000000000000000000000000000000000017905290565b600081601401835110156106825761068261009b600485518560140161137d565b50016014015173ffffffffffffffffffffffffffffffffffffffff1690565b6040516060907f095ea7b300000000000000000000000000000000000000000000000000000000906106d99085908590602401612c12565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905061040e8482611423565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107a9576000546107a99061009b90339073ffffffffffffffffffffffffffffffffffffffff166114db565b565b806107b55761096b565b60006107c7838263ffffffff6105b116565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167ff47261b000000000000000000000000000000000000000000000000000000000148061085a57507fffffffff0000000000000000000000000000000000000000000000000000000081167fdc1600f300000000000000000000000000000000000000000000000000000000145b1561086e57610869838361157d565b61045d565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f025717920000000000000000000000000000000000000000000000000000000014156108c257610869838361159d565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f94cfcdd700000000000000000000000000000000000000000000000000000000141561091657610869838361166a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc339d10a000000000000000000000000000000000000000000000000000000001461045d5761045d61009b826116f2565b5050565b8151815160009190811461098b5761098b61009b82855161170d565b34915060005b818114610a3a5760008582815181106109a657fe5b60200260200101519050808410156109c5576109c561009b828661172a565b6109d5848263ffffffff61174716565b93508482815181106109e357fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610a30573d6000803e3d6000fd5b5050600101610991565b50600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015610aa557600080fd5b505af1158015610ab9573d6000803e3d6000fd5b50505050505092915050565b6000806000610b7a600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631ce4c78b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610b3557600080fd5b505afa158015610b49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610b6d9190810190612ade565b3a9063ffffffff61176616565b86519091507fdc1600f3000000000000000000000000000000000000000000000000000000009060005b818114610f1b57888181518110610bb757fe5b60200260200101516080015160001480610be85750888181518110610bd857fe5b602002602001015160a001516000145b15610bf257610f13565b6000610c3c610c138b8481518110610c0657fe5b6020026020010151611797565b610c1d5785610c20565b60005b610c308b8a63ffffffff61174716565b9063ffffffff61174716565b90506000610c6c60008c8581518110610c5157fe5b602002602001015161014001516105b190919063ffffffff16565b90506000807fffffffff000000000000000000000000000000000000000000000000000000008084169088161415610d7257610cca60108e8781518110610caf57fe5b6020026020010151610140015161066190919063ffffffff16565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815290925073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190610d1f903090600401612b99565b60206040518083038186803b158015610d3757600080fd5b505afa158015610d4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d6f9190810190612ade565b90505b600080610da68f8881518110610d8457fe5b60200260200101518e8981518110610d9857fe5b60200260200101518861180c565b91509150887bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161415610eb4576040517f70a0823100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff8616906370a0823190610e45903090600401612b99565b60206040518083038186803b158015610e5d57600080fd5b505afa158015610e71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610e959190810190612ade565b9050610eb0610eaa828663ffffffff61174716565b83611936565b9150505b610ed68f8881518110610ec357fe5b60200260200101516101400151826107ab565b610ee68c8363ffffffff61194d16565b9b50610ef88b8263ffffffff61194d16565b9a508d8c10610f0c57505050505050610f1b565b5050505050505b600101610ba4565b50505050935093915050565b81811115610f3c57610f3c61009b8234611969565b6000610f4e838363ffffffff61174716565b9050801561045d576003546040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690632e1a7d4d90610fac908490600401612f03565b600060405180830381600087803b158015610fc657600080fd5b505af1158015610fda573d6000803e3d6000fd5b505060405133925083156108fc02915083906000818181858888f1935050505015801561040e573d6000803e3d6000fd5b825160009081907fdc1600f30000000000000000000000000000000000000000000000000000000090825b8181146113265787818151811061104957fe5b6020026020010151608001516000148061107a575087818151811061106a57fe5b602002602001015160a001516000145b156110845761131e565b6000611096888663ffffffff61174716565b905060006110ab60008b8581518110610c5157fe5b90506000807fffffffff000000000000000000000000000000000000000000000000000000008084169088161415611196576110ee60108d8781518110610caf57fe5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815290925073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190611143903090600401612b99565b60206040518083038186803b15801561115b57600080fd5b505afa15801561116f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506111939190810190612ade565b90505b6000806111ca8e88815181106111a857fe5b60200260200101518d89815181106111bc57fe5b602002602001015188611986565b91509150887bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614156112d2576040517f70a0823100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff8616906370a0823190611269903090600401612b99565b60206040518083038186803b15801561128157600080fd5b505afa158015611295573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506112b99190810190612ade565b90506112ce610eaa828663ffffffff61174716565b9150505b6112e18e8881518110610ec357fe5b6112f18b8363ffffffff61194d16565b9a506113038a8263ffffffff61194d16565b99508c8a1061131757505050505050611326565b5050505050505b600101611036565b508583101561133c5761133c61009b8785611a58565b5050935093915050565b60408051808201909152600481527fe69edc3e00000000000000000000000000000000000000000000000000000000602082015290565b6060632800659560e01b84848460405160240161139c93929190612c9a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b9392505050565b600060608373ffffffffffffffffffffffffffffffffffffffff168360405161144c9190612b7d565b6000604051808303816000865af19150503d8060008114611489576040519150601f19603f3d011682016040523d82523d6000602084013e61148e565b606091505b509150915081156114d25780516114a657505061096b565b8051602014156114d25760006114bd826000611a75565b905080600114156114d05750505061096b565b505b61040e81610222565b6060631de45ad160e01b83836040516024016114f8929190612bba565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905092915050565b600061159083601063ffffffff61066116565b905061045d813384611a81565b806001146115b1576115b161009b82611ab9565b60006115c483601063ffffffff61066116565b905060006115d984602463ffffffff611a7516565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd9061163290309033908690600401612be1565b600060405180830381600087803b15801561164c57600080fd5b505af1158015611660573d6000803e3d6000fd5b5050505050505050565b6060806116846004855186611ad49092919063ffffffff16565b8060200190516116979190810190612949565b8051919350915060005b81811461040b576116ea8382815181106116b757fe5b60200260200101516116e58684815181106116ce57fe5b60200260200101518861176690919063ffffffff16565b6107ab565b6001016116a1565b6060637996a27160e01b8260405160240161019e9190612c38565b6060633ecb6ceb60e01b83836040516024016114f8929190612f0c565b606063ecf40fd960e01b83836040516024016114f8929190612f0c565b6000828211156117605761176061009b60028585611b54565b50900390565b60008261177557506000610601565b8282028284828161178257fe5b041461141c5761141c61009b60018686611b54565b600060038261018001515111801561060157506101808201517f770501f800000000000000000000000000000000000000000000000000000000906117e390600063ffffffff6105b116565b7fffffffff00000000000000000000000000000000000000000000000000000000161492915050565b6000808460e00151600014806118315750611831856101a00151866101400151611b73565b156118885761183e6122af565b611849868587611d20565b90506118668160800151826020015161194d90919063ffffffff16565b60608201518251919450611880919063ffffffff61174716565b91505061192e565b61189c856101a00151866101600151611b73565b1561191d5760a085015160e08601516000916118c9916118c390829063ffffffff61194d16565b86611d5b565b90506118d36122af565b6118de878388611d20565b905061190f81608001516119038360600151846020015161194d90919063ffffffff16565b9063ffffffff61194d16565b9051909350915061192e9050565b61192e61009b866101a00151611d91565b935093915050565b600081831015611946578161141c565b5090919050565b60008282018381101561141c5761141c61009b60008686611b54565b606063cdcbed5d60e01b83836040516024016114f8929190612f0c565b6000808460e00151600014806119ab57506119ab856101a00151866101600151611b73565b156119c55760006118c98660a00151876080015186611d5b565b6119d9856101a00151866101400151611b73565b1561191d576000611a038660a001516118c38860e00151896080015161174790919063ffffffff16565b9050611a0d6122af565b611a18878388611d20565b9050611a358160800151826020015161194d90919063ffffffff16565b60608201518251919550611a4f919063ffffffff61174716565b9250505061192e565b60606391353a0c60e01b83836040516024016114f8929190612f0c565b600061141c8383611dac565b6040516060907fa9059cbb00000000000000000000000000000000000000000000000000000000906106d99085908590602401612c12565b606063baffa47460e01b8260405160240161019e9190612f03565b606081831115611aed57611aed61009b6000858561137d565b8351821115611b0657611b0661009b600184875161137d565b8282036040519080825280601f01601f191660200182016040528015611b33576020820181803883390190505b50905061141c611b4282611dd6565b84611b4c87611dd6565b018351611ddc565b606063e946c1bb60e01b84848460405160240161139c93929190612c78565b600080611b86848263ffffffff6105b116565b90506000611b9a848263ffffffff6105b116565b90507ff47261b0000000000000000000000000000000000000000000000000000000007fdc1600f3000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008416821480611c3257507fffffffff00000000000000000000000000000000000000000000000000000000848116908216145b8015611c9057507fffffffff000000000000000000000000000000000000000000000000000000008381169083161480611c9057507fffffffff00000000000000000000000000000000000000000000000000000000838116908216145b15611cfb576000611ca888601063ffffffff61066116565b90506000611cbd88601063ffffffff61066116565b90508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149650505050505050610601565b611d0b878763ffffffff611e9f16565b945050505050610601565b5050505092915050565b611d286122af565b611d3184611797565b15611d4857611d41848484611ec4565b905061141c565b611d53848484612118565b949350505050565b6000611d5383611d85611d7582600163ffffffff61174716565b611903888763ffffffff61176616565b9063ffffffff61228516565b60606331360af160e01b8260405160240161019e9190612c65565b60008160200183511015611dcd57611dcd61009b600585518560200161137d565b50016020015190565b60200190565b6020811015611e06576001816020036101000a03801983511681855116808217865250505061045d565b82821415611e135761045d565b82821115611e4d5760208103905080820181840181515b82851015611e45578451865260209586019590940193611e2a565b90525061045d565b60208103905080820181840183515b81861215611e9657825182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09283019290910190611e5c565b85525050505050565b60008151835114801561141c5750508051602091820120825192909101919091201490565b611ecc6122af565b611ed46122de565b604051806101800160405280866000015173ffffffffffffffffffffffffffffffffffffffff168152602001866020015173ffffffffffffffffffffffffffffffffffffffff168152602001866040015173ffffffffffffffffffffffffffffffffffffffff168152602001866060015173ffffffffffffffffffffffffffffffffffffffff168152602001866080015181526020018660a001518152602001600081526020016000815260200186610100015181526020018661012001518152602001866101400151815260200186610160015181525090506060600073ffffffffffffffffffffffffffffffffffffffff1663b4be83d5905060e01b828686604051602401611fe793929190612ca8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252600254915190925073ffffffffffffffffffffffffffffffffffffffff909116906000906060908390612098908690612b7d565b6000604051808303816000865af19150503d80600081146120d5576040519150601f19603f3d011682016040523d82523d6000602084013e6120da565b606091505b5091509150811561210c5780516080146120f057fe5b808060200190516121049190810190612af6565b602088015286525b50505050509392505050565b6121206122af565b6040516060907f9b44d556000000000000000000000000000000000000000000000000000000009061215a90879087908790602401612dc8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252600154915190925073ffffffffffffffffffffffffffffffffffffffff90911690600090606090839061220b908690612b7d565b6000604051808303816000865af19150503d8060008114612248576040519150601f19603f3d011682016040523d82523d6000602084013e61224d565b606091505b5091509150811561227a57805160a01461226357fe5b808060200190516122779190810190612a8d565b94505b505050509392505050565b60008161229b5761229b61009b60038585611b54565b60008284816122a657fe5b04949350505050565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b604051806101800160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160608152602001606081525090565b803561060181612fcf565b600082601f8301126123b2578081fd5b81356123c56123c082612f41565b612f1a565b8181529150602080830190848101818402860182018710156123e657600080fd5b60005b8481101561240e5781356123fc81612fcf565b845292820192908201906001016123e9565b505050505092915050565b600082601f830112612429578081fd5b81516124376123c082612f41565b818152915060208083019084810160005b8481101561240e578151870188603f82011261246357600080fd5b838101516124736123c082612f61565b8181528a604083850101111561248857600080fd5b6124988287830160408601612fa3565b865250509282019290820190600101612448565b600082601f8301126124bc578081fd5b81356124ca6123c082612f41565b8181529150602080830190840160005b83811015611d16576124f28760208435890101612769565b835260209283019291909101906001016124da565b600082601f830112612517578081fd5b81356125256123c082612f41565b818152915060208083019084810160005b8481101561240e57813587016101c0807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0838c0301121561257657600080fd5b61257f81612f1a565b61258b8b878501612397565b815261259a8b60408501612397565b868201526125ab8b60608501612397565b60408201526125bd8b60808501612397565b606082015260a0830135608082015260c083013560a082015260e083013560c08201526101008084013560e0830152610120808501358284015261014091508185013581840152506101608085013567ffffffffffffffff8082111561262257600080fd5b6126308f8b848a0101612769565b8486015261018093508387013591508082111561264c57600080fd5b61265a8f8b848a0101612769565b838601526101a092508287013591508082111561267657600080fd5b6126848f8b848a0101612769565b848601528587013593508084111561269b57600080fd5b50506126ab8d8984880101612769565b9083015250865250509282019290820190600101612536565b600082601f8301126126d4578081fd5b81356126e26123c082612f41565b81815291506020808301908481018184028601820187101561270357600080fd5b60005b8481101561240e57813584529282019290820190600101612706565b60008083601f840112612733578182fd5b50813567ffffffffffffffff81111561274a578182fd5b60208301915083602082850101111561276257600080fd5b9250929050565b600082601f830112612779578081fd5b81356127876123c082612f61565b915080825283602082850101111561279e57600080fd5b8060208401602084013760009082016020015292915050565b6000602082840312156127c8578081fd5b813561141c81612fcf565b6000602082840312156127e4578081fd5b815161141c81612fcf565b60008060008060808587031215612804578283fd5b843567ffffffffffffffff8082111561281b578485fd5b61282788838901612507565b9550602087013591508082111561283c578485fd5b612848888389016124ac565b9450604087013591508082111561285d578384fd5b612869888389016126c4565b9350606087013591508082111561287e578283fd5b5061288b878288016123a2565b91505092959194509250565b600080600080600060a086880312156128ae578283fd5b853567ffffffffffffffff808211156128c5578485fd5b6128d189838a01612507565b96506020880135955060408801359150808211156128ed578485fd5b6128f989838a016124ac565b9450606088013591508082111561290e578283fd5b61291a89838a016126c4565b9350608088013591508082111561292f578283fd5b5061293c888289016123a2565b9150509295509295909350565b6000806040838503121561295b578182fd5b825167ffffffffffffffff80821115612972578384fd5b81850186601f820112612983578485fd5b805192506129936123c084612f41565b80848252602080830192508084018a8283890287010111156129b3578889fd5b8894505b868510156129d55780518452600194909401939281019281016129b7565b5088015190965093505050808211156129ec578283fd5b506129f985828601612419565b9150509250929050565b60008060208385031215612a15578182fd5b823567ffffffffffffffff811115612a2b578283fd5b612a3785828601612722565b90969095509350505050565b600080600060408486031215612a57578081fd5b833567ffffffffffffffff811115612a6d578182fd5b612a7986828701612722565b909790965060209590950135949350505050565b600060a08284031215612a9e578081fd5b612aa860a0612f1a565b82518152602083015160208201526040830151604082015260608301516060820152608083015160808201528091505092915050565b600060208284031215612aef578081fd5b5051919050565b60008060408385031215612b08578182fd5b505080516020909101519092909150565b73ffffffffffffffffffffffffffffffffffffffff169052565b60008151808452612b4b816020860160208601612fa3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60008251612b8f818460208701612fa3565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b7fffffffff0000000000000000000000000000000000000000000000000000000091909116815260200190565b60006020825261141c6020830184612b33565b6060810160048510612c8657fe5b938152602081019290925260409091015290565b6060810160088510612c8657fe5b600060608252612cbc606083018651612b19565b6020850151612cce6080840182612b19565b506040850151612ce160a0840182612b19565b506060850151612cf460c0840182612b19565b50608085015160e083015260a0850151610100818185015260c08701519150610120828186015260e088015192506101408381870152828901519350610160925083838701528189015193506101809150838287015280890151935050806101a086015250612d676101e0850183612b33565b8188015192507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0858203016101c0860152612da28184612b33565b9150508560208501528381036040850152612dbd8186612b33565b979650505050505050565b600060608252612ddc606083018651612b19565b6020850151612dee6080840182612b19565b506040850151612e0160a0840182612b19565b506060850151612e1460c0840182612b19565b50608085015160e083015260a0850151610100818185015260c08701519150610120828186015260e0880151925061014083818701528289015193506101609250838387015281890151935061018091508382870152808901519350506101c06101a08181880152612e8a610220880186612b33565b848b015195507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa09450848882030183890152612ec68187612b33565b925050828a0151945083878303016101e0880152612ee48286612b33565b9250808a0151945050508185820301610200860152612da28184612b33565b90815260200190565b918252602082015260400190565b60405181810167ffffffffffffffff81118282101715612f3957600080fd5b604052919050565b600067ffffffffffffffff821115612f57578081fd5b5060209081020190565b600067ffffffffffffffff821115612f77578081fd5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b83811015612fbe578181015183820152602001612fa6565b8381111561040e5750506000910152565b73ffffffffffffffffffffffffffffffffffffffff811681146105ae57600080fdfea365627a7a72315820eec27b903034df8255c53e9199fa4129bd65899c9572dc672f6d190dddfbf71b6c6578706572696d656e74616cf564736f6c63430005100040" }, "deployedBytecode": { - "object": "0x6080604052600436106100655760003560e01c8063942d33c011610043578063942d33c014610102578063ae93b97a14610124578063f2fde38b1461013757610065565b8063442026ed14610097578063630f1e6c146100b75780638da5cb5b146100d7575b60025473ffffffffffffffffffffffffffffffffffffffff1633146100955761009561009033610157565b6101f6565b005b3480156100a357600080fd5b506100956100b2366004612191565b6101fe565b3480156100c357600080fd5b506100956100d23660046121d1565b6103e8565b3480156100e357600080fd5b506100ec610436565b6040516100f99190612304565b60405180910390f35b610115610110366004612108565b610452565b6040516100f99392919061258b565b61011561013236600461208b565b610487565b34801561014357600080fd5b50610095610152366004612053565b6104e2565b60606308b1869860e01b826040516024016101729190612304565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050919050565b805160208201fd5b600061024a600084848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff610586169050565b90507ff47261b0000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082168114156103e2576001546040517f6070410800000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906360704108906102ee9085906004016123a3565b60206040518083038186803b15801561030657600080fd5b505afa15801561031a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061033e919081019061206f565b905073ffffffffffffffffffffffffffffffffffffffff8116610366576103666100906105dc565b60006103b2601087878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff610636169050565b90506103df81837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610676565b50505b50505050565b6103f0610737565b61043183838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250859250610780915050565b505050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b600080600061045f610899565b61046a88888861092e565b909350915061047a838686610cb8565b9050955095509592505050565b6000806000610494610899565b60006104b8670de0b6b3a76400006104b2888263ffffffff610e5716565b34610e7a565b90506104c5888289610ea4565b90945092506104d5848787610cb8565b9150509450945094915050565b6104ea610737565b73ffffffffffffffffffffffffffffffffffffffff81166105155761051061009061128f565b610583565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35b50565b600081600401835110156105a7576105a761009060038551856004016112c6565b5060208183018101519101907fffffffff00000000000000000000000000000000000000000000000000000000165b92915050565b6040805160048152602481019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff3b96b8d0000000000000000000000000000000000000000000000000000000017905290565b600081601401835110156106575761065761009060048551856014016112c6565b50016014015173ffffffffffffffffffffffffffffffffffffffff1690565b6040516060907f095ea7b300000000000000000000000000000000000000000000000000000000906106ae908590859060240161237d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290506103e2848261136b565b60005473ffffffffffffffffffffffffffffffffffffffff16331461077e5760005461077e9061009090339073ffffffffffffffffffffffffffffffffffffffff16611427565b565b6000610792838263ffffffff61058616565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167ff47261b000000000000000000000000000000000000000000000000000000000148061082557507fffffffff0000000000000000000000000000000000000000000000000000000081167fdc1600f300000000000000000000000000000000000000000000000000000000145b156108395761083483836114c9565b610431565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f0257179200000000000000000000000000000000000000000000000000000000141561088d5761083483836114e9565b610431610090826115b6565b346108a9576108a96100906115d1565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561091357600080fd5b505af1158015610927573d6000803e3d6000fd5b5050505050565b825160009081907fdc1600f30000000000000000000000000000000000000000000000000000000090825b818114610c985787818151811061096c57fe5b6020026020010151608001516000148061099d575087818151811061098d57fe5b602002602001015160a001516000145b156109a757610c90565b60006109b9888663ffffffff61162b16565b905060006109e960008b85815181106109ce57fe5b6020026020010151610140015161058690919063ffffffff16565b90506000807fffffffff000000000000000000000000000000000000000000000000000000008084169088161415610aef57610a4760108d8781518110610a2c57fe5b6020026020010151610140015161063690919063ffffffff16565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815290925073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190610a9c903090600401612304565b60206040518083038186803b158015610ab457600080fd5b505afa158015610ac8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610aec919081019061226c565b90505b600080610b238e8881518110610b0157fe5b60200260200101518d8981518110610b1557fe5b60200260200101518861164a565b91509150887bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161415610c31576040517f70a0823100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff8616906370a0823190610bc2903090600401612304565b60206040518083038186803b158015610bda57600080fd5b505afa158015610bee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c12919081019061226c565b9050610c2d610c27828663ffffffff61162b16565b8361178f565b9150505b610c538e8881518110610c4057fe5b6020026020010151610140015182610780565b610c638b8363ffffffff610e5716565b9a50610c758a8263ffffffff610e5716565b99508c8a10610c8957505050505050610c98565b5050505050505b600101610959565b5085831015610cae57610cae61009087856117a6565b5050935093915050565b600066b1a2bc2ec50000831115610cd557610cd5610090846117c3565b34841115610cea57610cea61009085346117de565b6000610cfc348663ffffffff61162b16565b9050610d1184670de0b6b3a764000087610e7a565b915080821115610d2857610d2861009083836117fb565b8015610e4f576002546040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690632e1a7d4d90610d84908490600401612574565b600060405180830381600087803b158015610d9e57600080fd5b505af1158015610db2573d6000803e3d6000fd5b505050506000821115610e045760405173ffffffffffffffffffffffffffffffffffffffff84169083156108fc029084906000818181858888f19350505050158015610e02573d6000803e3d6000fd5b505b6000610e16828463ffffffff61162b16565b90508015610e4d57604051339082156108fc029083906000818181858888f19350505050158015610e4b573d6000803e3d6000fd5b505b505b509392505050565b600082820183811015610e7357610e7361009060008686611818565b9392505050565b6000610e9c83610e90868563ffffffff61183716565b9063ffffffff61186816565b949350505050565b6000806000610f59600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631ce4c78b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f1457600080fd5b505afa158015610f28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f4c919081019061226c565b3a9063ffffffff61183716565b86519091507fdc1600f3000000000000000000000000000000000000000000000000000000009060005b81811461128357888181518110610f9657fe5b60200260200101516080015160001480610fc75750888181518110610fb757fe5b602002602001015160a001516000145b15610fd15761127b565b6000610ff385610fe78b8a63ffffffff61162b16565b9063ffffffff61162b16565b9050600061100860008c85815181106109ce57fe5b90506000807fffffffff0000000000000000000000000000000000000000000000000000000080841690881614156110f35761104b60108e8781518110610a2c57fe5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815290925073ffffffffffffffffffffffffffffffffffffffff8316906370a08231906110a0903090600401612304565b60206040518083038186803b1580156110b857600080fd5b505afa1580156110cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110f0919081019061226c565b90505b6000806111278f888151811061110557fe5b60200260200101518e898151811061111957fe5b602002602001015188611892565b91509150887bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916141561122f576040517f70a0823100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff8616906370a08231906111c6903090600401612304565b60206040518083038186803b1580156111de57600080fd5b505afa1580156111f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611216919081019061226c565b905061122b610c27828663ffffffff61162b16565b9150505b61123e8f8881518110610c4057fe5b61124e8c8363ffffffff610e5716565b9b506112608b8263ffffffff610e5716565b9a508d8c1061127457505050505050611283565b5050505050505b600101610f83565b50505050935093915050565b60408051808201909152600481527fe69edc3e00000000000000000000000000000000000000000000000000000000602082015290565b6060632800659560e01b8484846040516024016112e593929190612405565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290509392505050565b600060608373ffffffffffffffffffffffffffffffffffffffff168360405161139491906122e8565b6000604051808303816000865af19150503d80600081146113d1576040519150601f19603f3d011682016040523d82523d6000602084013e6113d6565b606091505b5091509150811561141a5780516113ee575050611423565b80516020141561141a576000611405826000611949565b9050806001141561141857505050611423565b505b6103e2816101f6565b5050565b6060631de45ad160e01b8383604051602401611444929190612325565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905092915050565b60006114dc83601063ffffffff61063616565b9050610431813384611955565b806001146114fd576114fd6100908261198d565b600061151083601063ffffffff61063616565b9050600061152584602463ffffffff61194916565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd9061157e9030903390869060040161234c565b600060405180830381600087803b15801561159857600080fd5b505af11580156115ac573d6000803e3d6000fd5b5050505050505050565b6060637996a27160e01b8260405160240161017291906123a3565b6040805160048152602481019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8c0e562b0000000000000000000000000000000000000000000000000000000017905290565b6000828211156116445761164461009060028585611818565b50900390565b6000808460e001516000148061166f575061166f856101a001518661016001516119a8565b156116dd5760006116898660a00151876080015186611b47565b9050611693611d23565b61169e878388611b71565b90506116cf81608001516116c383606001518460200151610e5790919063ffffffff16565b9063ffffffff610e5716565b905190935091506117879050565b6116f1856101a001518661014001516119a8565b156117765760006117218660a0015161171b8860e00151896080015161162b90919063ffffffff16565b86611b47565b905061172b611d23565b611736878388611b71565b905061175381608001518260200151610e5790919063ffffffff16565b6060820151825191955061176d919063ffffffff61162b16565b92505050611787565b611787610090866101a00151611cde565b935093915050565b60008183101561179f5781610e73565b5090919050565b60606391353a0c60e01b838360405160240161144492919061257d565b6060631174fb8060e01b826040516024016101729190612574565b606063cdcbed5d60e01b838360405160240161144492919061257d565b606063ecf40fd960e01b838360405160240161144492919061257d565b606063e946c1bb60e01b8484846040516024016112e5939291906123e3565b600082611846575060006105d6565b8282028284828161185357fe5b0414610e7357610e7361009060018686611818565b60008161187e5761187e61009060038585611818565b600082848161188957fe5b04949350505050565b6000808460e00151600014806118b757506118b7856101a001518661014001516119a8565b1561190e576118c4611d23565b6118cf868587611b71565b90506118ec81608001518260200151610e5790919063ffffffff16565b60608201518251919450611906919063ffffffff61162b16565b915050611787565b611922856101a001518661016001516119a8565b156117765760a085015160e08601516000916116899161171b90829063ffffffff610e5716565b6000610e738383611cf9565b6040516060907fa9059cbb00000000000000000000000000000000000000000000000000000000906106ae908590859060240161237d565b606063baffa47460e01b826040516024016101729190612574565b6000806119bb848263ffffffff61058616565b905060006119cf848263ffffffff61058616565b90507ff47261b0000000000000000000000000000000000000000000000000000000007fdc1600f3000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008416821480611a6757507fffffffff00000000000000000000000000000000000000000000000000000000848116908216145b8015611ac557507fffffffff000000000000000000000000000000000000000000000000000000008381169083161480611ac557507fffffffff00000000000000000000000000000000000000000000000000000000838116908216145b15611b30576000611add88601063ffffffff61063616565b90506000611af288601063ffffffff61063616565b90508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161496505050505050506105d6565b60009450505050506105d6565b5050505092915050565b6000610e9c83610e90611b6182600163ffffffff61162b16565b6116c3888763ffffffff61183716565b611b79611d23565b6040516060907f9b44d5560000000000000000000000000000000000000000000000000000000090611bb390879087908790602401612413565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252600154915190925073ffffffffffffffffffffffffffffffffffffffff909116906000906060908390611c649086906122e8565b6000604051808303816000865af19150503d8060008114611ca1576040519150601f19603f3d011682016040523d82523d6000602084013e611ca6565b606091505b50915091508115611cd357805160a014611cbc57fe5b80806020019051611cd0919081019061221b565b94505b505050509392505050565b60606331360af160e01b8260405160240161017291906123d0565b60008160200183511015611d1a57611d1a61009060058551856020016112c6565b50016020015190565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b80356105d681612614565b600082601f830112611d6d578081fd5b8135611d80611d7b826125c8565b6125a1565b8181529150602080830190840160005b83811015611b3d57611da88760208435890101611fcc565b83526020928301929190910190600101611d90565b600082601f830112611dcd578081fd5b8135611ddb611d7b826125c8565b818152915060208083019084810160005b84811015611f7a57813587016101c0807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0838c03011215611e2c57600080fd5b611e35816125a1565b611e418b878501611d52565b8152611e508b60408501611d52565b86820152611e618b60608501611d52565b6040820152611e738b60808501611d52565b606082015260a0830135608082015260c083013560a082015260e083013560c08201526101008084013560e0830152610120808501358284015261014091508185013581840152506101608085013567ffffffffffffffff80821115611ed857600080fd5b611ee68f8b848a0101611fcc565b84860152610180935083870135915080821115611f0257600080fd5b611f108f8b848a0101611fcc565b838601526101a0925082870135915080821115611f2c57600080fd5b611f3a8f8b848a0101611fcc565b8486015285870135935080841115611f5157600080fd5b5050611f618d8984880101611fcc565b9083015250865250509282019290820190600101611dec565b505050505092915050565b60008083601f840112611f96578182fd5b50813567ffffffffffffffff811115611fad578182fd5b602083019150836020828501011115611fc557600080fd5b9250929050565b600082601f830112611fdc578081fd5b813567ffffffffffffffff811115611ff2578182fd5b61202360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016125a1565b915080825283602082850101111561203a57600080fd5b8060208401602084013760009082016020015292915050565b600060208284031215612064578081fd5b8135610e7381612614565b600060208284031215612080578081fd5b8151610e7381612614565b600080600080608085870312156120a0578283fd5b843567ffffffffffffffff808211156120b7578485fd5b6120c388838901611dbd565b955060208701359150808211156120d8578485fd5b506120e587828801611d5d565b9350506040850135915060608501356120fd81612614565b939692955090935050565b600080600080600060a0868803121561211f578081fd5b853567ffffffffffffffff80821115612136578283fd5b61214289838a01611dbd565b965060208801359550604088013591508082111561215e578283fd5b5061216b88828901611d5d565b93505060608601359150608086013561218381612614565b809150509295509295909350565b600080602083850312156121a3578182fd5b823567ffffffffffffffff8111156121b9578283fd5b6121c585828601611f85565b90969095509350505050565b6000806000604084860312156121e5578283fd5b833567ffffffffffffffff8111156121fb578384fd5b61220786828701611f85565b909790965060209590950135949350505050565b600060a0828403121561222c578081fd5b61223660a06125a1565b82518152602083015160208201526040830151604082015260608301516060820152608083015160808201528091505092915050565b60006020828403121561227d578081fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff169052565b600081518084526122b68160208601602086016125e8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600082516122fa8184602087016125e8565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b7fffffffff0000000000000000000000000000000000000000000000000000000091909116815260200190565b600060208252610e73602083018461229e565b60608101600485106123f157fe5b938152602081019290925260409091015290565b60608101600885106123f157fe5b600060608252612427606083018651612284565b60208501516124396080840182612284565b50604085015161244c60a0840182612284565b50606085015161245f60c0840182612284565b50608085015160e083015260a0850151610100818185015260c08701519150610120828186015260e0880151925061014083818701528289015193506101609250838387015281890151935061018091508382870152808901519350506101c06101a081818801526124d561022088018661229e565b848b015195507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa09450848882030183890152612511818761229e565b925050828a0151945083878303016101e088015261252f828661229e565b9250808a015194505050818582030161020086015261254e818461229e565b9150508560208501528381036040850152612569818661229e565b979650505050505050565b90815260200190565b918252602082015260400190565b9283526020830191909152604082015260600190565b60405181810167ffffffffffffffff811182821017156125c057600080fd5b604052919050565b600067ffffffffffffffff8211156125de578081fd5b5060209081020190565b60005b838110156126035781810151838201526020016125eb565b838111156103e25750506000910152565b73ffffffffffffffffffffffffffffffffffffffff8116811461058357600080fdfea365627a7a723158206b46b28e3e02b6a8f8e2d3f8301ffac3b31c4d183245d9faedf1b2973ea8db6b6c6578706572696d656e74616cf564736f6c634300050d0040" + "object": "0x6080604052600436106100705760003560e01c8063907e5cc31161004e578063907e5cc31461010d5780639e8323151461012e578063e196001b14610141578063f2fde38b1461016357610070565b8063442026ed146100a2578063630f1e6c146100c25780638da5cb5b146100e2575b60035473ffffffffffffffffffffffffffffffffffffffff1633146100a0576100a061009b33610183565b610222565b005b3480156100ae57600080fd5b506100a06100bd366004612a03565b61022a565b3480156100ce57600080fd5b506100a06100dd366004612a43565b610414565b3480156100ee57600080fd5b506100f7610462565b6040516101049190612b99565b60405180910390f35b61012061011b3660046127ef565b61047e565b604051610104929190612f0c565b61012061013c366004612897565b6104b3565b34801561014d57600080fd5b506101566104e9565b6040516101049190612c38565b34801561016f57600080fd5b506100a061017e3660046127b7565b61050d565b60606308b1869860e01b8260405160240161019e9190612b99565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050919050565b805160208201fd5b6000610276600084848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff6105b1169050565b90507ff47261b0000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821681141561040e576001546040517f6070410800000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff169063607041089061031a908590600401612c38565b60206040518083038186803b15801561033257600080fd5b505afa158015610346573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061036a91908101906127d3565b905073ffffffffffffffffffffffffffffffffffffffff81166103925761039261009b610607565b60006103de601087878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff610661169050565b905061040b81837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6106a1565b50505b50505050565b61041c610762565b61045d83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508592506107ab915050565b505050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b600080600061048d858561096f565b905061049a878288610ac5565b90935091506104a98184610f27565b5094509492505050565b60008060006104c2858561096f565b90506104cf88888861100b565b90935091506104de8184610f27565b509550959350505050565b7f770501f80000000000000000000000000000000000000000000000000000000081565b610515610762565b73ffffffffffffffffffffffffffffffffffffffff81166105405761053b61009b611346565b6105ae565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35b50565b600081600401835110156105d2576105d261009b600385518560040161137d565b5060208183018101519101907fffffffff00000000000000000000000000000000000000000000000000000000165b92915050565b6040805160048152602481019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff3b96b8d0000000000000000000000000000000000000000000000000000000017905290565b600081601401835110156106825761068261009b600485518560140161137d565b50016014015173ffffffffffffffffffffffffffffffffffffffff1690565b6040516060907f095ea7b300000000000000000000000000000000000000000000000000000000906106d99085908590602401612c12565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905061040e8482611423565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107a9576000546107a99061009b90339073ffffffffffffffffffffffffffffffffffffffff166114db565b565b806107b55761096b565b60006107c7838263ffffffff6105b116565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167ff47261b000000000000000000000000000000000000000000000000000000000148061085a57507fffffffff0000000000000000000000000000000000000000000000000000000081167fdc1600f300000000000000000000000000000000000000000000000000000000145b1561086e57610869838361157d565b61045d565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f025717920000000000000000000000000000000000000000000000000000000014156108c257610869838361159d565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f94cfcdd700000000000000000000000000000000000000000000000000000000141561091657610869838361166a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc339d10a000000000000000000000000000000000000000000000000000000001461045d5761045d61009b826116f2565b5050565b8151815160009190811461098b5761098b61009b82855161170d565b34915060005b818114610a3a5760008582815181106109a657fe5b60200260200101519050808410156109c5576109c561009b828661172a565b6109d5848263ffffffff61174716565b93508482815181106109e357fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610a30573d6000803e3d6000fd5b5050600101610991565b50600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015610aa557600080fd5b505af1158015610ab9573d6000803e3d6000fd5b50505050505092915050565b6000806000610b7a600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631ce4c78b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610b3557600080fd5b505afa158015610b49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610b6d9190810190612ade565b3a9063ffffffff61176616565b86519091507fdc1600f3000000000000000000000000000000000000000000000000000000009060005b818114610f1b57888181518110610bb757fe5b60200260200101516080015160001480610be85750888181518110610bd857fe5b602002602001015160a001516000145b15610bf257610f13565b6000610c3c610c138b8481518110610c0657fe5b6020026020010151611797565b610c1d5785610c20565b60005b610c308b8a63ffffffff61174716565b9063ffffffff61174716565b90506000610c6c60008c8581518110610c5157fe5b602002602001015161014001516105b190919063ffffffff16565b90506000807fffffffff000000000000000000000000000000000000000000000000000000008084169088161415610d7257610cca60108e8781518110610caf57fe5b6020026020010151610140015161066190919063ffffffff16565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815290925073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190610d1f903090600401612b99565b60206040518083038186803b158015610d3757600080fd5b505afa158015610d4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d6f9190810190612ade565b90505b600080610da68f8881518110610d8457fe5b60200260200101518e8981518110610d9857fe5b60200260200101518861180c565b91509150887bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161415610eb4576040517f70a0823100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff8616906370a0823190610e45903090600401612b99565b60206040518083038186803b158015610e5d57600080fd5b505afa158015610e71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610e959190810190612ade565b9050610eb0610eaa828663ffffffff61174716565b83611936565b9150505b610ed68f8881518110610ec357fe5b60200260200101516101400151826107ab565b610ee68c8363ffffffff61194d16565b9b50610ef88b8263ffffffff61194d16565b9a508d8c10610f0c57505050505050610f1b565b5050505050505b600101610ba4565b50505050935093915050565b81811115610f3c57610f3c61009b8234611969565b6000610f4e838363ffffffff61174716565b9050801561045d576003546040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690632e1a7d4d90610fac908490600401612f03565b600060405180830381600087803b158015610fc657600080fd5b505af1158015610fda573d6000803e3d6000fd5b505060405133925083156108fc02915083906000818181858888f1935050505015801561040e573d6000803e3d6000fd5b825160009081907fdc1600f30000000000000000000000000000000000000000000000000000000090825b8181146113265787818151811061104957fe5b6020026020010151608001516000148061107a575087818151811061106a57fe5b602002602001015160a001516000145b156110845761131e565b6000611096888663ffffffff61174716565b905060006110ab60008b8581518110610c5157fe5b90506000807fffffffff000000000000000000000000000000000000000000000000000000008084169088161415611196576110ee60108d8781518110610caf57fe5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815290925073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190611143903090600401612b99565b60206040518083038186803b15801561115b57600080fd5b505afa15801561116f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506111939190810190612ade565b90505b6000806111ca8e88815181106111a857fe5b60200260200101518d89815181106111bc57fe5b602002602001015188611986565b91509150887bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614156112d2576040517f70a0823100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff8616906370a0823190611269903090600401612b99565b60206040518083038186803b15801561128157600080fd5b505afa158015611295573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506112b99190810190612ade565b90506112ce610eaa828663ffffffff61174716565b9150505b6112e18e8881518110610ec357fe5b6112f18b8363ffffffff61194d16565b9a506113038a8263ffffffff61194d16565b99508c8a1061131757505050505050611326565b5050505050505b600101611036565b508583101561133c5761133c61009b8785611a58565b5050935093915050565b60408051808201909152600481527fe69edc3e00000000000000000000000000000000000000000000000000000000602082015290565b6060632800659560e01b84848460405160240161139c93929190612c9a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b9392505050565b600060608373ffffffffffffffffffffffffffffffffffffffff168360405161144c9190612b7d565b6000604051808303816000865af19150503d8060008114611489576040519150601f19603f3d011682016040523d82523d6000602084013e61148e565b606091505b509150915081156114d25780516114a657505061096b565b8051602014156114d25760006114bd826000611a75565b905080600114156114d05750505061096b565b505b61040e81610222565b6060631de45ad160e01b83836040516024016114f8929190612bba565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905092915050565b600061159083601063ffffffff61066116565b905061045d813384611a81565b806001146115b1576115b161009b82611ab9565b60006115c483601063ffffffff61066116565b905060006115d984602463ffffffff611a7516565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd9061163290309033908690600401612be1565b600060405180830381600087803b15801561164c57600080fd5b505af1158015611660573d6000803e3d6000fd5b5050505050505050565b6060806116846004855186611ad49092919063ffffffff16565b8060200190516116979190810190612949565b8051919350915060005b81811461040b576116ea8382815181106116b757fe5b60200260200101516116e58684815181106116ce57fe5b60200260200101518861176690919063ffffffff16565b6107ab565b6001016116a1565b6060637996a27160e01b8260405160240161019e9190612c38565b6060633ecb6ceb60e01b83836040516024016114f8929190612f0c565b606063ecf40fd960e01b83836040516024016114f8929190612f0c565b6000828211156117605761176061009b60028585611b54565b50900390565b60008261177557506000610601565b8282028284828161178257fe5b041461141c5761141c61009b60018686611b54565b600060038261018001515111801561060157506101808201517f770501f800000000000000000000000000000000000000000000000000000000906117e390600063ffffffff6105b116565b7fffffffff00000000000000000000000000000000000000000000000000000000161492915050565b6000808460e00151600014806118315750611831856101a00151866101400151611b73565b156118885761183e6122af565b611849868587611d20565b90506118668160800151826020015161194d90919063ffffffff16565b60608201518251919450611880919063ffffffff61174716565b91505061192e565b61189c856101a00151866101600151611b73565b1561191d5760a085015160e08601516000916118c9916118c390829063ffffffff61194d16565b86611d5b565b90506118d36122af565b6118de878388611d20565b905061190f81608001516119038360600151846020015161194d90919063ffffffff16565b9063ffffffff61194d16565b9051909350915061192e9050565b61192e61009b866101a00151611d91565b935093915050565b600081831015611946578161141c565b5090919050565b60008282018381101561141c5761141c61009b60008686611b54565b606063cdcbed5d60e01b83836040516024016114f8929190612f0c565b6000808460e00151600014806119ab57506119ab856101a00151866101600151611b73565b156119c55760006118c98660a00151876080015186611d5b565b6119d9856101a00151866101400151611b73565b1561191d576000611a038660a001516118c38860e00151896080015161174790919063ffffffff16565b9050611a0d6122af565b611a18878388611d20565b9050611a358160800151826020015161194d90919063ffffffff16565b60608201518251919550611a4f919063ffffffff61174716565b9250505061192e565b60606391353a0c60e01b83836040516024016114f8929190612f0c565b600061141c8383611dac565b6040516060907fa9059cbb00000000000000000000000000000000000000000000000000000000906106d99085908590602401612c12565b606063baffa47460e01b8260405160240161019e9190612f03565b606081831115611aed57611aed61009b6000858561137d565b8351821115611b0657611b0661009b600184875161137d565b8282036040519080825280601f01601f191660200182016040528015611b33576020820181803883390190505b50905061141c611b4282611dd6565b84611b4c87611dd6565b018351611ddc565b606063e946c1bb60e01b84848460405160240161139c93929190612c78565b600080611b86848263ffffffff6105b116565b90506000611b9a848263ffffffff6105b116565b90507ff47261b0000000000000000000000000000000000000000000000000000000007fdc1600f3000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008416821480611c3257507fffffffff00000000000000000000000000000000000000000000000000000000848116908216145b8015611c9057507fffffffff000000000000000000000000000000000000000000000000000000008381169083161480611c9057507fffffffff00000000000000000000000000000000000000000000000000000000838116908216145b15611cfb576000611ca888601063ffffffff61066116565b90506000611cbd88601063ffffffff61066116565b90508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149650505050505050610601565b611d0b878763ffffffff611e9f16565b945050505050610601565b5050505092915050565b611d286122af565b611d3184611797565b15611d4857611d41848484611ec4565b905061141c565b611d53848484612118565b949350505050565b6000611d5383611d85611d7582600163ffffffff61174716565b611903888763ffffffff61176616565b9063ffffffff61228516565b60606331360af160e01b8260405160240161019e9190612c65565b60008160200183511015611dcd57611dcd61009b600585518560200161137d565b50016020015190565b60200190565b6020811015611e06576001816020036101000a03801983511681855116808217865250505061045d565b82821415611e135761045d565b82821115611e4d5760208103905080820181840181515b82851015611e45578451865260209586019590940193611e2a565b90525061045d565b60208103905080820181840183515b81861215611e9657825182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09283019290910190611e5c565b85525050505050565b60008151835114801561141c5750508051602091820120825192909101919091201490565b611ecc6122af565b611ed46122de565b604051806101800160405280866000015173ffffffffffffffffffffffffffffffffffffffff168152602001866020015173ffffffffffffffffffffffffffffffffffffffff168152602001866040015173ffffffffffffffffffffffffffffffffffffffff168152602001866060015173ffffffffffffffffffffffffffffffffffffffff168152602001866080015181526020018660a001518152602001600081526020016000815260200186610100015181526020018661012001518152602001866101400151815260200186610160015181525090506060600073ffffffffffffffffffffffffffffffffffffffff1663b4be83d5905060e01b828686604051602401611fe793929190612ca8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252600254915190925073ffffffffffffffffffffffffffffffffffffffff909116906000906060908390612098908690612b7d565b6000604051808303816000865af19150503d80600081146120d5576040519150601f19603f3d011682016040523d82523d6000602084013e6120da565b606091505b5091509150811561210c5780516080146120f057fe5b808060200190516121049190810190612af6565b602088015286525b50505050509392505050565b6121206122af565b6040516060907f9b44d556000000000000000000000000000000000000000000000000000000009061215a90879087908790602401612dc8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252600154915190925073ffffffffffffffffffffffffffffffffffffffff90911690600090606090839061220b908690612b7d565b6000604051808303816000865af19150503d8060008114612248576040519150601f19603f3d011682016040523d82523d6000602084013e61224d565b606091505b5091509150811561227a57805160a01461226357fe5b808060200190516122779190810190612a8d565b94505b505050509392505050565b60008161229b5761229b61009b60038585611b54565b60008284816122a657fe5b04949350505050565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b604051806101800160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160608152602001606081525090565b803561060181612fcf565b600082601f8301126123b2578081fd5b81356123c56123c082612f41565b612f1a565b8181529150602080830190848101818402860182018710156123e657600080fd5b60005b8481101561240e5781356123fc81612fcf565b845292820192908201906001016123e9565b505050505092915050565b600082601f830112612429578081fd5b81516124376123c082612f41565b818152915060208083019084810160005b8481101561240e578151870188603f82011261246357600080fd5b838101516124736123c082612f61565b8181528a604083850101111561248857600080fd5b6124988287830160408601612fa3565b865250509282019290820190600101612448565b600082601f8301126124bc578081fd5b81356124ca6123c082612f41565b8181529150602080830190840160005b83811015611d16576124f28760208435890101612769565b835260209283019291909101906001016124da565b600082601f830112612517578081fd5b81356125256123c082612f41565b818152915060208083019084810160005b8481101561240e57813587016101c0807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0838c0301121561257657600080fd5b61257f81612f1a565b61258b8b878501612397565b815261259a8b60408501612397565b868201526125ab8b60608501612397565b60408201526125bd8b60808501612397565b606082015260a0830135608082015260c083013560a082015260e083013560c08201526101008084013560e0830152610120808501358284015261014091508185013581840152506101608085013567ffffffffffffffff8082111561262257600080fd5b6126308f8b848a0101612769565b8486015261018093508387013591508082111561264c57600080fd5b61265a8f8b848a0101612769565b838601526101a092508287013591508082111561267657600080fd5b6126848f8b848a0101612769565b848601528587013593508084111561269b57600080fd5b50506126ab8d8984880101612769565b9083015250865250509282019290820190600101612536565b600082601f8301126126d4578081fd5b81356126e26123c082612f41565b81815291506020808301908481018184028601820187101561270357600080fd5b60005b8481101561240e57813584529282019290820190600101612706565b60008083601f840112612733578182fd5b50813567ffffffffffffffff81111561274a578182fd5b60208301915083602082850101111561276257600080fd5b9250929050565b600082601f830112612779578081fd5b81356127876123c082612f61565b915080825283602082850101111561279e57600080fd5b8060208401602084013760009082016020015292915050565b6000602082840312156127c8578081fd5b813561141c81612fcf565b6000602082840312156127e4578081fd5b815161141c81612fcf565b60008060008060808587031215612804578283fd5b843567ffffffffffffffff8082111561281b578485fd5b61282788838901612507565b9550602087013591508082111561283c578485fd5b612848888389016124ac565b9450604087013591508082111561285d578384fd5b612869888389016126c4565b9350606087013591508082111561287e578283fd5b5061288b878288016123a2565b91505092959194509250565b600080600080600060a086880312156128ae578283fd5b853567ffffffffffffffff808211156128c5578485fd5b6128d189838a01612507565b96506020880135955060408801359150808211156128ed578485fd5b6128f989838a016124ac565b9450606088013591508082111561290e578283fd5b61291a89838a016126c4565b9350608088013591508082111561292f578283fd5b5061293c888289016123a2565b9150509295509295909350565b6000806040838503121561295b578182fd5b825167ffffffffffffffff80821115612972578384fd5b81850186601f820112612983578485fd5b805192506129936123c084612f41565b80848252602080830192508084018a8283890287010111156129b3578889fd5b8894505b868510156129d55780518452600194909401939281019281016129b7565b5088015190965093505050808211156129ec578283fd5b506129f985828601612419565b9150509250929050565b60008060208385031215612a15578182fd5b823567ffffffffffffffff811115612a2b578283fd5b612a3785828601612722565b90969095509350505050565b600080600060408486031215612a57578081fd5b833567ffffffffffffffff811115612a6d578182fd5b612a7986828701612722565b909790965060209590950135949350505050565b600060a08284031215612a9e578081fd5b612aa860a0612f1a565b82518152602083015160208201526040830151604082015260608301516060820152608083015160808201528091505092915050565b600060208284031215612aef578081fd5b5051919050565b60008060408385031215612b08578182fd5b505080516020909101519092909150565b73ffffffffffffffffffffffffffffffffffffffff169052565b60008151808452612b4b816020860160208601612fa3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60008251612b8f818460208701612fa3565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b7fffffffff0000000000000000000000000000000000000000000000000000000091909116815260200190565b60006020825261141c6020830184612b33565b6060810160048510612c8657fe5b938152602081019290925260409091015290565b6060810160088510612c8657fe5b600060608252612cbc606083018651612b19565b6020850151612cce6080840182612b19565b506040850151612ce160a0840182612b19565b506060850151612cf460c0840182612b19565b50608085015160e083015260a0850151610100818185015260c08701519150610120828186015260e088015192506101408381870152828901519350610160925083838701528189015193506101809150838287015280890151935050806101a086015250612d676101e0850183612b33565b8188015192507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0858203016101c0860152612da28184612b33565b9150508560208501528381036040850152612dbd8186612b33565b979650505050505050565b600060608252612ddc606083018651612b19565b6020850151612dee6080840182612b19565b506040850151612e0160a0840182612b19565b506060850151612e1460c0840182612b19565b50608085015160e083015260a0850151610100818185015260c08701519150610120828186015260e0880151925061014083818701528289015193506101609250838387015281890151935061018091508382870152808901519350506101c06101a08181880152612e8a610220880186612b33565b848b015195507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa09450848882030183890152612ec68187612b33565b925050828a0151945083878303016101e0880152612ee48286612b33565b9250808a0151945050508185820301610200860152612da28184612b33565b90815260200190565b918252602082015260400190565b60405181810167ffffffffffffffff81118282101715612f3957600080fd5b604052919050565b600067ffffffffffffffff821115612f57578081fd5b5060209081020190565b600067ffffffffffffffff821115612f77578081fd5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b83811015612fbe578181015183820152602001612fa6565b8381111561040e5750506000910152565b73ffffffffffffffffffffffffffffffffffffffff811681146105ae57600080fdfea365627a7a72315820eec27b903034df8255c53e9199fa4129bd65899c9572dc672f6d190dddfbf71b6c6578706572696d656e74616cf564736f6c63430005100040" } } }, "compiler": { "name": "solc", - "version": "soljson-v0.5.13+commit.5b0b510c.js", + "version": "soljson-v0.5.16+commit.9c3226ce.js", "settings": { "optimizer": { "enabled": true, @@ -205,7 +217,7 @@ ] } }, - "evmVersion": "constantinople" + "evmVersion": "istanbul" } }, "chains": {} diff --git a/packages/contract-artifacts/artifacts/IAssetProxy.json b/packages/contract-artifacts/artifacts/IAssetProxy.json index 07bfeef77f..d76a1f066d 100644 --- a/packages/contract-artifacts/artifacts/IAssetProxy.json +++ b/packages/contract-artifacts/artifacts/IAssetProxy.json @@ -3,6 +3,15 @@ "contractName": "IAssetProxy", "compilerOutput": { "abi": [ + { + "constant": true, + "inputs": [], + "name": "getProxyId", + "outputs": [{ "internalType": "bytes4", "name": "", "type": "bytes4" }], + "payable": false, + "stateMutability": "pure", + "type": "function" + }, { "constant": false, "inputs": [ @@ -16,15 +25,6 @@ "payable": false, "stateMutability": "nonpayable", "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getProxyId", - "outputs": [{ "internalType": "bytes4", "name": "", "type": "bytes4" }], - "payable": false, - "stateMutability": "pure", - "type": "function" } ], "devdoc": { @@ -48,7 +48,7 @@ }, "compiler": { "name": "solc", - "version": "soljson-v0.5.11+commit.c082d0b4.js", + "version": "soljson-v0.5.16+commit.9c3226ce.js", "settings": { "optimizer": { "enabled": true, @@ -67,8 +67,8 @@ ] } }, - "evmVersion": "constantinople" + "evmVersion": "istanbul" } }, - "networks": {} + "chains": {} } diff --git a/packages/contract-artifacts/artifacts/IERC20BridgeSampler.json b/packages/contract-artifacts/artifacts/IERC20BridgeSampler.json index 23c85e1908..b55fb70aa7 100644 --- a/packages/contract-artifacts/artifacts/IERC20BridgeSampler.json +++ b/packages/contract-artifacts/artifacts/IERC20BridgeSampler.json @@ -242,7 +242,7 @@ }, "compiler": { "name": "solc", - "version": "soljson-v0.5.13+commit.5b0b510c.js", + "version": "soljson-v0.5.16+commit.9c3226ce.js", "settings": { "optimizer": { "enabled": true, @@ -261,7 +261,7 @@ ] } }, - "evmVersion": "constantinople" + "evmVersion": "istanbul" } }, "chains": {} diff --git a/packages/contract-artifacts/artifacts/IWallet.json b/packages/contract-artifacts/artifacts/IWallet.json index d9b7072224..200bae941b 100644 --- a/packages/contract-artifacts/artifacts/IWallet.json +++ b/packages/contract-artifacts/artifacts/IWallet.json @@ -29,7 +29,7 @@ }, "compiler": { "name": "solc", - "version": "soljson-v0.5.11+commit.c082d0b4.js", + "version": "soljson-v0.5.16+commit.9c3226ce.js", "settings": { "optimizer": { "enabled": true, @@ -48,8 +48,8 @@ ] } }, - "evmVersion": "constantinople" + "evmVersion": "istanbul" } }, - "networks": {} + "chains": {} } diff --git a/packages/contract-artifacts/artifacts/MultiAssetProxy.json b/packages/contract-artifacts/artifacts/MultiAssetProxy.json index b76f85d7f8..92cd29e90c 100644 --- a/packages/contract-artifacts/artifacts/MultiAssetProxy.json +++ b/packages/contract-artifacts/artifacts/MultiAssetProxy.json @@ -4,117 +4,14 @@ "compilerOutput": { "abi": [ { - "constant": true, - "inputs": [{ "internalType": "bytes4", "name": "", "type": "bytes4" }], - "name": "assetProxies", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [{ "internalType": "address", "name": "target", "type": "address" }], - "name": "addAuthorizedAddress", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "name": "authorities", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [{ "internalType": "bytes4", "name": "assetProxyId", "type": "bytes4" }], - "name": "getAssetProxy", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [{ "internalType": "address", "name": "target", "type": "address" }], - "name": "removeAuthorizedAddress", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "owner", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, + "anonymous": false, "inputs": [ - { "internalType": "address", "name": "target", "type": "address" }, - { "internalType": "uint256", "name": "index", "type": "uint256" } + { "indexed": false, "internalType": "bytes4", "name": "id", "type": "bytes4" }, + { "indexed": false, "internalType": "address", "name": "assetProxy", "type": "address" } ], - "name": "removeAuthorizedAddressAtIndex", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" + "name": "AssetProxyRegistered", + "type": "event" }, - { - "constant": true, - "inputs": [], - "name": "getProxyId", - "outputs": [{ "internalType": "bytes4", "name": "", "type": "bytes4" }], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [{ "internalType": "address", "name": "", "type": "address" }], - "name": "authorized", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [{ "internalType": "address", "name": "assetProxy", "type": "address" }], - "name": "registerAssetProxy", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getAuthorizedAddresses", - "outputs": [{ "internalType": "address[]", "name": "", "type": "address[]" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [{ "internalType": "address", "name": "newOwner", "type": "address" }], - "name": "transferOwnership", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { "payable": false, "stateMutability": "nonpayable", "type": "fallback" }, { "anonymous": false, "inputs": [ @@ -136,11 +33,123 @@ { "anonymous": false, "inputs": [ - { "indexed": false, "internalType": "bytes4", "name": "id", "type": "bytes4" }, - { "indexed": false, "internalType": "address", "name": "assetProxy", "type": "address" } + { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, + { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], - "name": "AssetProxyRegistered", + "name": "OwnershipTransferred", "type": "event" + }, + { "payable": false, "stateMutability": "nonpayable", "type": "fallback" }, + { + "constant": false, + "inputs": [{ "internalType": "address", "name": "target", "type": "address" }], + "name": "addAuthorizedAddress", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [{ "internalType": "bytes4", "name": "", "type": "bytes4" }], + "name": "assetProxies", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "name": "authorities", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [{ "internalType": "address", "name": "", "type": "address" }], + "name": "authorized", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [{ "internalType": "bytes4", "name": "assetProxyId", "type": "bytes4" }], + "name": "getAssetProxy", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getAuthorizedAddresses", + "outputs": [{ "internalType": "address[]", "name": "", "type": "address[]" }], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "getProxyId", + "outputs": [{ "internalType": "bytes4", "name": "", "type": "bytes4" }], + "payable": false, + "stateMutability": "pure", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "owner", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [{ "internalType": "address", "name": "assetProxy", "type": "address" }], + "name": "registerAssetProxy", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [{ "internalType": "address", "name": "target", "type": "address" }], + "name": "removeAuthorizedAddress", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { "internalType": "address", "name": "target", "type": "address" }, + { "internalType": "uint256", "name": "index", "type": "uint256" } + ], + "name": "removeAuthorizedAddressAtIndex", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [{ "internalType": "address", "name": "newOwner", "type": "address" }], + "name": "transferOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" } ], "devdoc": { @@ -181,16 +190,16 @@ }, "evm": { "bytecode": { - "object": "0x6080604052600080546001600160a01b03191633179055611617806100256000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c80639ad2674411610081578063c585bb931161005b578063c585bb9314610789578063d39de6e9146107bc578063f2fde38b14610814576100d4565b80639ad26744146106cc578063ae25532e14610705578063b918161114610742576100d4565b806360704108116100b2578063607041081461065257806370712939146106915780638da5cb5b146106c4576100d4565b80633fd3c9971461059857806342f1181e14610600578063494503d414610635575b7fffffffff00000000000000000000000000000000000000000000000000000000600035167fa85e59e400000000000000000000000000000000000000000000000000000000811415610592573360005260026020526040600020546101a5577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c1553454e4445525f4e4f545f415554484f52495a454400000000000000604052600060605260646000fd5b600480350180356020600482030660448210171561022e577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c19494e56414c49445f41535345545f444154415f4c454e475448000000604052600060605260646000fd5b602081018201368111156102ad577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c16494e56414c49445f41535345545f444154415f454e44000000000000604052600060605260646000fd5b5050602481013560448201356044820183016020810335925060448201840160208103358085031561034a577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c0f4c454e4754485f4d49534d4154434800000000000000000000000000604052600060605260646000fd5b5060646000803760806004526000936064359060200285805b82811015610587578086013584810281868204148615176103ef577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c1055494e543235365f4f564552464c4f57000000000000000000000000604052600060605260646000fd5b60649081528287013589018b01604481019250018135600481101561049e577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c1e4c454e4754485f475245415445525f5448414e5f335f5245515549526040527f454400000000000000000000000000000000000000000000000000000000000060605260646000fd5b7fffffffff000000000000000000000000000000000000000000000000000000008235168b8103156104df57809b508b608452600160a45260406084205495505b5084610556577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c1a41535345545f50524f58595f444f45535f4e4f545f45584953540000604052600060605260646000fd5b60208101836084376000808260a401600080895af1925050508061057e573d6000803e3d6000fd5b50602001610363565b505050505050505050005b50600080fd5b6105d7600480360360208110156105ae57600080fd5b50357fffffffff0000000000000000000000000000000000000000000000000000000016610847565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6106336004803603602081101561061657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661086f565b005b6105d76004803603602081101561064b57600080fd5b5035610a5b565b6105d76004803603602081101561066857600080fd5b50357fffffffff0000000000000000000000000000000000000000000000000000000016610a8f565b610633600480360360208110156106a757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610ad9565b6105d7610dcc565b610633600480360360408110156106e257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610de8565b61070d611199565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b6107756004803603602081101561075857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166111cf565b604080519115158252519081900360200190f35b6106336004803603602081101561079f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166111e4565b6107c4611446565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156108005781810151838201526020016107e8565b505050509050019250505060405180910390f35b6106336004803603602081101561082a57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166114b5565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108f557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526002602052604090205460ff161561098a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5441524745545f414c52454144595f415554484f52495a454400000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915560038054918201815583527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b60038181548110610a6857fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b7fffffffff000000000000000000000000000000000000000000000000000000001660009081526001602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b5f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526002602052604090205460ff16610bf357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116600090815260026020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b600354811015610d85578173ffffffffffffffffffffffffffffffffffffffff1660038281548110610c6d57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff161415610d7d57600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110610cc557fe5b6000918252602090912001546003805473ffffffffffffffffffffffffffffffffffffffff9092169183908110610cf857fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190610d77908261159b565b50610d85565b600101610c3f565b50604051339073ffffffffffffffffffffffffffffffffffffffff8316907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a350565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff163314610e6e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526002602052604090205460ff16610f0257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b6003548110610f7257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f494e4445585f4f55545f4f465f424f554e445300000000000000000000000000604482015290519081900360640190fd5b8173ffffffffffffffffffffffffffffffffffffffff1660038281548110610f9657fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff161461102457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f415554484f52495a45445f414444524553535f4d49534d415443480000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061109f57fe5b6000918252602090912001546003805473ffffffffffffffffffffffffffffffffffffffff90921691839081106110d257fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190611151908261159b565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b604080517f4d756c746941737365742875696e743235365b5d2c62797465735b5d290000008152905190819003601d0190205b90565b60026020526000908152604090205460ff1681565b60005473ffffffffffffffffffffffffffffffffffffffff16331461126a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b60008173ffffffffffffffffffffffffffffffffffffffff1663ae25532e6040518163ffffffff1660e01b815260040160206040518083038186803b1580156112b257600080fd5b505afa1580156112c6573d6000803e3d6000fd5b505050506040513d60208110156112dc57600080fd5b50517fffffffff00000000000000000000000000000000000000000000000000000000811660009081526001602052604090205490915073ffffffffffffffffffffffffffffffffffffffff16801561139657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f41535345545f50524f58595f414c52454144595f455849535453000000000000604482015290519081900360640190fd5b7fffffffff00000000000000000000000000000000000000000000000000000000821660008181526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff881690811790915582519384529083015280517fd2c6b762299c609bdb96520b58a49bfb80186934d4f71a86a367571a15c031949281900390910190a1505050565b606060038054806020026020016040519081016040528092919081815260200182805480156114ab57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611480575b5050505050905090565b60005473ffffffffffffffffffffffffffffffffffffffff16331461153b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81161561159857600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b8154818355818111156115bf576000838152602090206115bf9181019083016115c4565b505050565b6111cc91905b808211156115de57600081556001016115ca565b509056fea265627a7a72315820ff218c9e47c47135d1028b03281d63826ba3569217fc501ee67c0661fa98fc5164736f6c634300050b0032" + "object": "0x6080604052600080546001600160a01b03191633179055611617806100256000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c80639ad2674411610081578063c585bb931161005b578063c585bb9314610789578063d39de6e9146107bc578063f2fde38b14610814576100d4565b80639ad26744146106cc578063ae25532e14610705578063b918161114610742576100d4565b806360704108116100b2578063607041081461065257806370712939146106915780638da5cb5b146106c4576100d4565b80633fd3c9971461059857806342f1181e14610600578063494503d414610635575b7fffffffff00000000000000000000000000000000000000000000000000000000600035167fa85e59e400000000000000000000000000000000000000000000000000000000811415610592573360005260026020526040600020546101a5577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c1553454e4445525f4e4f545f415554484f52495a454400000000000000604052600060605260646000fd5b600480350180356020600482030660448210171561022e577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c19494e56414c49445f41535345545f444154415f4c454e475448000000604052600060605260646000fd5b602081018201368111156102ad577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c16494e56414c49445f41535345545f444154415f454e44000000000000604052600060605260646000fd5b5050602481013560448201356044820183016020810335925060448201840160208103358085031561034a577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c0f4c454e4754485f4d49534d4154434800000000000000000000000000604052600060605260646000fd5b5060646000803760806004526000936064359060200285805b82811015610587578086013584810281868204148615176103ef577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c1055494e543235365f4f564552464c4f57000000000000000000000000604052600060605260646000fd5b60649081528287013589018b01604481019250018135600481101561049e577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c1e4c454e4754485f475245415445525f5448414e5f335f5245515549526040527f454400000000000000000000000000000000000000000000000000000000000060605260646000fd5b7fffffffff000000000000000000000000000000000000000000000000000000008235168b8103156104df57809b508b608452600160a45260406084205495505b5084610556577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c1a41535345545f50524f58595f444f45535f4e4f545f45584953540000604052600060605260646000fd5b60208101836084376000808260a401600080895af1925050508061057e573d6000803e3d6000fd5b50602001610363565b505050505050505050005b50600080fd5b6105d7600480360360208110156105ae57600080fd5b50357fffffffff0000000000000000000000000000000000000000000000000000000016610847565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6106336004803603602081101561061657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661086f565b005b6105d76004803603602081101561064b57600080fd5b5035610a5b565b6105d76004803603602081101561066857600080fd5b50357fffffffff0000000000000000000000000000000000000000000000000000000016610a8f565b610633600480360360208110156106a757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610ad9565b6105d7610dcc565b610633600480360360408110156106e257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610de8565b61070d611199565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b6107756004803603602081101561075857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166111cf565b604080519115158252519081900360200190f35b6106336004803603602081101561079f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166111e4565b6107c4611446565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156108005781810151838201526020016107e8565b505050509050019250505060405180910390f35b6106336004803603602081101561082a57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166114b5565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108f557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526002602052604090205460ff161561098a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5441524745545f414c52454144595f415554484f52495a454400000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915560038054918201815583527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b60038181548110610a6857fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b7fffffffff000000000000000000000000000000000000000000000000000000001660009081526001602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b5f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526002602052604090205460ff16610bf357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116600090815260026020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b600354811015610d85578173ffffffffffffffffffffffffffffffffffffffff1660038281548110610c6d57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff161415610d7d57600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110610cc557fe5b6000918252602090912001546003805473ffffffffffffffffffffffffffffffffffffffff9092169183908110610cf857fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190610d77908261159b565b50610d85565b600101610c3f565b50604051339073ffffffffffffffffffffffffffffffffffffffff8316907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a350565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff163314610e6e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526002602052604090205460ff16610f0257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b6003548110610f7257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f494e4445585f4f55545f4f465f424f554e445300000000000000000000000000604482015290519081900360640190fd5b8173ffffffffffffffffffffffffffffffffffffffff1660038281548110610f9657fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff161461102457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f415554484f52495a45445f414444524553535f4d49534d415443480000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061109f57fe5b6000918252602090912001546003805473ffffffffffffffffffffffffffffffffffffffff90921691839081106110d257fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190611151908261159b565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b604080517f4d756c746941737365742875696e743235365b5d2c62797465735b5d290000008152905190819003601d0190205b90565b60026020526000908152604090205460ff1681565b60005473ffffffffffffffffffffffffffffffffffffffff16331461126a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b60008173ffffffffffffffffffffffffffffffffffffffff1663ae25532e6040518163ffffffff1660e01b815260040160206040518083038186803b1580156112b257600080fd5b505afa1580156112c6573d6000803e3d6000fd5b505050506040513d60208110156112dc57600080fd5b50517fffffffff00000000000000000000000000000000000000000000000000000000811660009081526001602052604090205490915073ffffffffffffffffffffffffffffffffffffffff16801561139657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f41535345545f50524f58595f414c52454144595f455849535453000000000000604482015290519081900360640190fd5b7fffffffff00000000000000000000000000000000000000000000000000000000821660008181526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff881690811790915582519384529083015280517fd2c6b762299c609bdb96520b58a49bfb80186934d4f71a86a367571a15c031949281900390910190a1505050565b606060038054806020026020016040519081016040528092919081815260200182805480156114ab57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611480575b5050505050905090565b60005473ffffffffffffffffffffffffffffffffffffffff16331461153b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81161561159857600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b8154818355818111156115bf576000838152602090206115bf9181019083016115c4565b505050565b6111cc91905b808211156115de57600081556001016115ca565b509056fea265627a7a723158208c369898f25ccbc5756a1b54f39b5b3bc27def55a90c2c8464d83a7742d82bd964736f6c63430005100032" }, "deployedBytecode": { - "object": "0x608060405234801561001057600080fd5b50600436106100d45760003560e01c80639ad2674411610081578063c585bb931161005b578063c585bb9314610789578063d39de6e9146107bc578063f2fde38b14610814576100d4565b80639ad26744146106cc578063ae25532e14610705578063b918161114610742576100d4565b806360704108116100b2578063607041081461065257806370712939146106915780638da5cb5b146106c4576100d4565b80633fd3c9971461059857806342f1181e14610600578063494503d414610635575b7fffffffff00000000000000000000000000000000000000000000000000000000600035167fa85e59e400000000000000000000000000000000000000000000000000000000811415610592573360005260026020526040600020546101a5577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c1553454e4445525f4e4f545f415554484f52495a454400000000000000604052600060605260646000fd5b600480350180356020600482030660448210171561022e577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c19494e56414c49445f41535345545f444154415f4c454e475448000000604052600060605260646000fd5b602081018201368111156102ad577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c16494e56414c49445f41535345545f444154415f454e44000000000000604052600060605260646000fd5b5050602481013560448201356044820183016020810335925060448201840160208103358085031561034a577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c0f4c454e4754485f4d49534d4154434800000000000000000000000000604052600060605260646000fd5b5060646000803760806004526000936064359060200285805b82811015610587578086013584810281868204148615176103ef577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c1055494e543235365f4f564552464c4f57000000000000000000000000604052600060605260646000fd5b60649081528287013589018b01604481019250018135600481101561049e577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c1e4c454e4754485f475245415445525f5448414e5f335f5245515549526040527f454400000000000000000000000000000000000000000000000000000000000060605260646000fd5b7fffffffff000000000000000000000000000000000000000000000000000000008235168b8103156104df57809b508b608452600160a45260406084205495505b5084610556577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c1a41535345545f50524f58595f444f45535f4e4f545f45584953540000604052600060605260646000fd5b60208101836084376000808260a401600080895af1925050508061057e573d6000803e3d6000fd5b50602001610363565b505050505050505050005b50600080fd5b6105d7600480360360208110156105ae57600080fd5b50357fffffffff0000000000000000000000000000000000000000000000000000000016610847565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6106336004803603602081101561061657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661086f565b005b6105d76004803603602081101561064b57600080fd5b5035610a5b565b6105d76004803603602081101561066857600080fd5b50357fffffffff0000000000000000000000000000000000000000000000000000000016610a8f565b610633600480360360208110156106a757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610ad9565b6105d7610dcc565b610633600480360360408110156106e257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610de8565b61070d611199565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b6107756004803603602081101561075857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166111cf565b604080519115158252519081900360200190f35b6106336004803603602081101561079f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166111e4565b6107c4611446565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156108005781810151838201526020016107e8565b505050509050019250505060405180910390f35b6106336004803603602081101561082a57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166114b5565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108f557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526002602052604090205460ff161561098a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5441524745545f414c52454144595f415554484f52495a454400000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915560038054918201815583527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b60038181548110610a6857fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b7fffffffff000000000000000000000000000000000000000000000000000000001660009081526001602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b5f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526002602052604090205460ff16610bf357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116600090815260026020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b600354811015610d85578173ffffffffffffffffffffffffffffffffffffffff1660038281548110610c6d57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff161415610d7d57600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110610cc557fe5b6000918252602090912001546003805473ffffffffffffffffffffffffffffffffffffffff9092169183908110610cf857fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190610d77908261159b565b50610d85565b600101610c3f565b50604051339073ffffffffffffffffffffffffffffffffffffffff8316907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a350565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff163314610e6e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526002602052604090205460ff16610f0257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b6003548110610f7257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f494e4445585f4f55545f4f465f424f554e445300000000000000000000000000604482015290519081900360640190fd5b8173ffffffffffffffffffffffffffffffffffffffff1660038281548110610f9657fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff161461102457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f415554484f52495a45445f414444524553535f4d49534d415443480000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061109f57fe5b6000918252602090912001546003805473ffffffffffffffffffffffffffffffffffffffff90921691839081106110d257fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190611151908261159b565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b604080517f4d756c746941737365742875696e743235365b5d2c62797465735b5d290000008152905190819003601d0190205b90565b60026020526000908152604090205460ff1681565b60005473ffffffffffffffffffffffffffffffffffffffff16331461126a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b60008173ffffffffffffffffffffffffffffffffffffffff1663ae25532e6040518163ffffffff1660e01b815260040160206040518083038186803b1580156112b257600080fd5b505afa1580156112c6573d6000803e3d6000fd5b505050506040513d60208110156112dc57600080fd5b50517fffffffff00000000000000000000000000000000000000000000000000000000811660009081526001602052604090205490915073ffffffffffffffffffffffffffffffffffffffff16801561139657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f41535345545f50524f58595f414c52454144595f455849535453000000000000604482015290519081900360640190fd5b7fffffffff00000000000000000000000000000000000000000000000000000000821660008181526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff881690811790915582519384529083015280517fd2c6b762299c609bdb96520b58a49bfb80186934d4f71a86a367571a15c031949281900390910190a1505050565b606060038054806020026020016040519081016040528092919081815260200182805480156114ab57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611480575b5050505050905090565b60005473ffffffffffffffffffffffffffffffffffffffff16331461153b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81161561159857600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b8154818355818111156115bf576000838152602090206115bf9181019083016115c4565b505050565b6111cc91905b808211156115de57600081556001016115ca565b509056fea265627a7a72315820ff218c9e47c47135d1028b03281d63826ba3569217fc501ee67c0661fa98fc5164736f6c634300050b0032" + "object": "0x608060405234801561001057600080fd5b50600436106100d45760003560e01c80639ad2674411610081578063c585bb931161005b578063c585bb9314610789578063d39de6e9146107bc578063f2fde38b14610814576100d4565b80639ad26744146106cc578063ae25532e14610705578063b918161114610742576100d4565b806360704108116100b2578063607041081461065257806370712939146106915780638da5cb5b146106c4576100d4565b80633fd3c9971461059857806342f1181e14610600578063494503d414610635575b7fffffffff00000000000000000000000000000000000000000000000000000000600035167fa85e59e400000000000000000000000000000000000000000000000000000000811415610592573360005260026020526040600020546101a5577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c1553454e4445525f4e4f545f415554484f52495a454400000000000000604052600060605260646000fd5b600480350180356020600482030660448210171561022e577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c19494e56414c49445f41535345545f444154415f4c454e475448000000604052600060605260646000fd5b602081018201368111156102ad577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c16494e56414c49445f41535345545f444154415f454e44000000000000604052600060605260646000fd5b5050602481013560448201356044820183016020810335925060448201840160208103358085031561034a577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c0f4c454e4754485f4d49534d4154434800000000000000000000000000604052600060605260646000fd5b5060646000803760806004526000936064359060200285805b82811015610587578086013584810281868204148615176103ef577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c1055494e543235365f4f564552464c4f57000000000000000000000000604052600060605260646000fd5b60649081528287013589018b01604481019250018135600481101561049e577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c1e4c454e4754485f475245415445525f5448414e5f335f5245515549526040527f454400000000000000000000000000000000000000000000000000000000000060605260646000fd5b7fffffffff000000000000000000000000000000000000000000000000000000008235168b8103156104df57809b508b608452600160a45260406084205495505b5084610556577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c1a41535345545f50524f58595f444f45535f4e4f545f45584953540000604052600060605260646000fd5b60208101836084376000808260a401600080895af1925050508061057e573d6000803e3d6000fd5b50602001610363565b505050505050505050005b50600080fd5b6105d7600480360360208110156105ae57600080fd5b50357fffffffff0000000000000000000000000000000000000000000000000000000016610847565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6106336004803603602081101561061657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661086f565b005b6105d76004803603602081101561064b57600080fd5b5035610a5b565b6105d76004803603602081101561066857600080fd5b50357fffffffff0000000000000000000000000000000000000000000000000000000016610a8f565b610633600480360360208110156106a757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610ad9565b6105d7610dcc565b610633600480360360408110156106e257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610de8565b61070d611199565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b6107756004803603602081101561075857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166111cf565b604080519115158252519081900360200190f35b6106336004803603602081101561079f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166111e4565b6107c4611446565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156108005781810151838201526020016107e8565b505050509050019250505060405180910390f35b6106336004803603602081101561082a57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166114b5565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108f557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526002602052604090205460ff161561098a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5441524745545f414c52454144595f415554484f52495a454400000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915560038054918201815583527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b60038181548110610a6857fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b7fffffffff000000000000000000000000000000000000000000000000000000001660009081526001602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b5f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526002602052604090205460ff16610bf357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116600090815260026020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b600354811015610d85578173ffffffffffffffffffffffffffffffffffffffff1660038281548110610c6d57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff161415610d7d57600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110610cc557fe5b6000918252602090912001546003805473ffffffffffffffffffffffffffffffffffffffff9092169183908110610cf857fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190610d77908261159b565b50610d85565b600101610c3f565b50604051339073ffffffffffffffffffffffffffffffffffffffff8316907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a350565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff163314610e6e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526002602052604090205460ff16610f0257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b6003548110610f7257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f494e4445585f4f55545f4f465f424f554e445300000000000000000000000000604482015290519081900360640190fd5b8173ffffffffffffffffffffffffffffffffffffffff1660038281548110610f9657fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff161461102457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f415554484f52495a45445f414444524553535f4d49534d415443480000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061109f57fe5b6000918252602090912001546003805473ffffffffffffffffffffffffffffffffffffffff90921691839081106110d257fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190611151908261159b565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b604080517f4d756c746941737365742875696e743235365b5d2c62797465735b5d290000008152905190819003601d0190205b90565b60026020526000908152604090205460ff1681565b60005473ffffffffffffffffffffffffffffffffffffffff16331461126a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b60008173ffffffffffffffffffffffffffffffffffffffff1663ae25532e6040518163ffffffff1660e01b815260040160206040518083038186803b1580156112b257600080fd5b505afa1580156112c6573d6000803e3d6000fd5b505050506040513d60208110156112dc57600080fd5b50517fffffffff00000000000000000000000000000000000000000000000000000000811660009081526001602052604090205490915073ffffffffffffffffffffffffffffffffffffffff16801561139657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f41535345545f50524f58595f414c52454144595f455849535453000000000000604482015290519081900360640190fd5b7fffffffff00000000000000000000000000000000000000000000000000000000821660008181526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff881690811790915582519384529083015280517fd2c6b762299c609bdb96520b58a49bfb80186934d4f71a86a367571a15c031949281900390910190a1505050565b606060038054806020026020016040519081016040528092919081815260200182805480156114ab57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611480575b5050505050905090565b60005473ffffffffffffffffffffffffffffffffffffffff16331461153b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81161561159857600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b8154818355818111156115bf576000838152602090206115bf9181019083016115c4565b505050565b6111cc91905b808211156115de57600081556001016115ca565b509056fea265627a7a723158208c369898f25ccbc5756a1b54f39b5b3bc27def55a90c2c8464d83a7742d82bd964736f6c63430005100032" } } }, "compiler": { "name": "solc", - "version": "soljson-v0.5.11+commit.c082d0b4.js", + "version": "soljson-v0.5.16+commit.9c3226ce.js", "settings": { "optimizer": { "enabled": true, @@ -209,8 +218,8 @@ ] } }, - "evmVersion": "constantinople" + "evmVersion": "istanbul" } }, - "networks": {} + "chains": {} } diff --git a/packages/contract-artifacts/artifacts/Staking.json b/packages/contract-artifacts/artifacts/Staking.json index e5ef42a938..bdfa7ad8cf 100644 --- a/packages/contract-artifacts/artifacts/Staking.json +++ b/packages/contract-artifacts/artifacts/Staking.json @@ -3,15 +3,6 @@ "contractName": "Staking", "compilerOutput": { "abi": [ - { - "inputs": [ - { "internalType": "address", "name": "wethAddress", "type": "address" }, - { "internalType": "address", "name": "zrxVaultAddress", "type": "address" } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, { "anonymous": false, "inputs": [ @@ -862,11 +853,11 @@ "return": "Total stake delegated to pool." }, "getWethContract()": { - "details": "Returns the current weth contract address", + "details": "An overridable way to access the deployed WETH contract. Must be view to allow overrides to access state.", "return": "wethContract The WETH contract instance." }, "getZrxVault()": { - "details": "Returns the current zrxVault address.", + "details": "An overridable way to access the deployed zrxVault. Must be view to allow overrides to access state.", "return": "zrxVault The zrxVault contract." }, "init()": { @@ -879,9 +870,9 @@ "moveStake((uint8,bytes32),(uint8,bytes32),uint256)": { "details": "Moves stake between statuses: 'undelegated' or 'delegated'. Delegated stake can also be moved between pools. This change comes into effect next epoch.", "params": { - "amount": "of stake to move.", - "from": "status to move stake out of.", - "to": "status to move stake into." + "amount": "Amount of stake to move.", + "from": "Status to move stake out of.", + "to": "Status to move stake into." } }, "payProtocolFee(address,address,uint256)": { @@ -919,11 +910,15 @@ }, "stake(uint256)": { "details": "Stake ZRX tokens. Tokens are deposited into the ZRX Vault. Unstake to retrieve the ZRX. Stake is in the 'Active' status.", - "params": { "amount": "of ZRX to stake." } + "params": { "amount": "Amount of ZRX to stake." } + }, + "transferOwnership(address)": { + "details": "Change the owner of this contract.", + "params": { "newOwner": "New owner address." } }, "unstake(uint256)": { "details": "Unstake. Tokens are withdrawn from the ZRX Vault and returned to the staker. Stake must be in the 'undelegated' status in both the current and next epoch in order to be unstaked.", - "params": { "amount": "of ZRX to unstake." } + "params": { "amount": "Amount of ZRX to unstake." } }, "withdrawDelegatorRewards(bytes32)": { "details": "Withdraws the caller's WETH rewards that have accumulated until the last epoch.", @@ -933,10 +928,10 @@ }, "evm": { "bytecode": { - "object": "0x60806040523480156200001157600080fd5b50604051620059be380380620059be833981016040819052620000349162000071565b600080546001600160a01b03199081163317909155601880546001600160a01b0394851690831617905560198054929093169116179055620000c8565b6000806040838503121562000084578182fd5b82516200009181620000af565b6020840151909250620000a481620000af565b809150509250929050565b6001600160a01b0381168114620000c557600080fd5b50565b6158e680620000d86000396000f3fe6080604052600436106103555760003560e01c80639051c3ee116101bb578063bb7ef7e0116100f7578063e8eeb3f811610095578063f18765321161006f578063f187653214610955578063f252b7a114610975578063f2fde38b14610995578063ff691b11146109b557610355565b8063e8eeb3f81461090b578063e907f00314610920578063ee99205c1461094057610355565b8063dcb31f76116100d1578063dcb31f76146108ac578063e0ee036e146108c1578063e1c7392a146108d6578063e804d0a4146108eb57610355565b8063bb7ef7e01461084a578063c18c91411461086a578063d39de6e91461088a57610355565b8063a694fc3a11610164578063b2baa33e1161013e578063b2baa33e146107d5578063b3e33379146107ea578063b510879f1461080a578063b91816111461082a57610355565b8063a694fc3a14610780578063abe0906a146107a0578063b0531524146107c057610355565b8063a26171e211610195578063a26171e214610743578063a3b4a32714610758578063a657e5791461076b57610355565b80639051c3ee146106ee5780639ad26744146107035780639c3ccc821461072357610355565b80634e67339f116102955780636340380111610233578063766718081161020d578063766718081461068257806381666796146106975780638a2e271a146106b95780638da5cb5b146106d957610355565b8063634038011461062d57806368a7d6cd14610642578063707129391461066257610355565b80635bd4ab731161026f5780635bd4ab73146105a55780635d91121d146105d25780635e615a6b146105f2578063624a72321461061857610355565b80634e67339f14610550578063587da0231461057057806358f6c7e31461058557610355565b80633c277fc51161030257806344a6958b116102dc57806344a6958b146104b657806346b97959146104d6578063494503d4146105035780634bcc3f671461052357610355565b80633c277fc5146104475780633e4ad7321461046957806342f1181e1461049657610355565b80632a94c279116103335780632a94c279146103c75780632e17de78146103f657806338229d931461041657610355565b806301e28d841461035a5780630b9663db1461037c5780631e7ff8f6146103a7575b600080fd5b34801561036657600080fd5b5061037a6103753660046151e2565b6109d5565b005b34801561038857600080fd5b50610391610aa3565b60405161039e9190615561565b60405180910390f35b3480156103b357600080fd5b506103916103c23660046151e2565b610bf0565b3480156103d357600080fd5b506103e76103e2366004615315565b610c8a565b60405161039e9392919061574e565b34801561040257600080fd5b5061037a6104113660046152d9565b610cb6565b34801561042257600080fd5b506104366104313660046152d9565b610e6b565b60405161039e95949392919061577f565b34801561045357600080fd5b5061045c610e9a565b60405161039e919061545e565b34801561047557600080fd5b506104896104843660046152d9565b610f43565b60405161039e919061570f565b3480156104a257600080fd5b5061037a6104b13660046151e2565b610f62565b3480156104c257600080fd5b506104896104d1366004615285565b610f76565b3480156104e257600080fd5b506104f66104f13660046152d9565b610fd5565b60405161039e91906156bb565b34801561050f57600080fd5b5061045c61051e3660046152d9565b611020565b34801561052f57600080fd5b5061054361053e3660046152d9565b611054565b60405161039e91906156dc565b34801561055c57600080fd5b5061037a61056b3660046151e2565b6110b6565b34801561057c57600080fd5b506103916110fd565b34801561059157600080fd5b5061037a6105a036600461537e565b611103565b3480156105b157600080fd5b506105c56105c03660046151e2565b611300565b60405161039e9190615556565b3480156105de57600080fd5b5061037a6105ed366004615336565b611315565b3480156105fe57600080fd5b506106076113de565b60405161039e9594939291906157a2565b34801561062457600080fd5b5061045c611407565b34801561063957600080fd5b50610391611472565b34801561064e57600080fd5b5061039161065d366004615431565b611478565b34801561066e57600080fd5b5061037a61067d3660046151e2565b6115b1565b34801561068e57600080fd5b50610391611666565b3480156106a357600080fd5b506106ac61166c565b60405161039e91906157e6565b3480156106c557600080fd5b5061037a6106d43660046151e2565b611678565b3480156106e557600080fd5b5061045c61173a565b3480156106fa57600080fd5b5061045c611756565b34801561070f57600080fd5b5061037a61071e36600461525a565b611772565b34801561072f57600080fd5b5061037a61073e3660046153d3565b611784565b34801561074f57600080fd5b506103916117fe565b61037a61076636600461521a565b611804565b34801561077757600080fd5b50610391611a54565b34801561078c57600080fd5b5061037a61079b3660046152d9565b611a5a565b3480156107ac57600080fd5b5061037a6107bb3660046151e2565b611b6f565b3480156107cc57600080fd5b50610391611bb6565b3480156107e157600080fd5b50610391611bbc565b3480156107f657600080fd5b5061037a6108053660046152d9565b611bda565b34801561081657600080fd5b5061037a6108253660046152d9565b611c1a565b34801561083657600080fd5b506105c56108453660046151e2565b611c24565b34801561085657600080fd5b506103916108653660046152d9565b611c39565b34801561087657600080fd5b506103916108853660046152d9565b611cc4565b34801561089657600080fd5b5061089f611cd6565b60405161039e91906154fd565b3480156108b857600080fd5b5061045c611d45565b3480156108cd57600080fd5b506106ac611d61565b3480156108e257600080fd5b5061037a611d6d565b3480156108f757600080fd5b50610489610906366004615362565b611d87565b34801561091757600080fd5b506106ac611ed7565b34801561092c57600080fd5b5061039161093b3660046152f1565b611eeb565b34801561094c57600080fd5b5061045c611f88565b34801561096157600080fd5b506103916109703660046151e2565b611fa4565b34801561098157600080fd5b5061048961099036600461525a565b611fb6565b3480156109a157600080fd5b5061037a6109b03660046151e2565b611ff7565b3480156109c157600080fd5b5061037a6109d03660046152d9565b61209a565b6109dd6122c7565b73ffffffffffffffffffffffffffffffffffffffff811660009081526010602052604090205460ff16610a1d57610a1d610a186001836122ea565b61238c565b73ffffffffffffffffffffffffffffffffffffffff81166000908152601060205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517ff50d0d312d501878616eb5e78ebf3ed6dcd3955aaef8165af9c6b057cc4832fb90610a9890839061545e565b60405180910390a150565b600c5460009081610abb82600163ffffffff61239416565b6000818152601660205260409020600101549091508015610ae357610ae3610a1883836123b3565b610aeb6123d0565b610af3612443565b600084815260166020526040902055610b0a6150ee565b50600083815260166020908152604091829020825160a08101845281548082526001830154938201849052600283015482860181905260038401546060840181905260049094015460808401529451919488947fbb4a26fa0ace13ee4da343896c20eaa44a618fb9071fdd8c2e2c960a4583189d94610b8c9491939291615764565b60405180910390a2610b9c6124e7565b6020810151610be357805160405185917fb463d19ecf455be65365092cf8e1db6934a0334cf8cd532ddf9964d01f36b5b291610bda916000916155ac565b60405180910390a25b6020015193505050505b90565b6000610bfa611407565b73ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401610c32919061545e565b60206040518083038186803b158015610c4a57600080fd5b505afa158015610c5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c8291908101906153bb565b90505b919050565b601560209081526000928352604080842090915290825290208054600182015460029092015490919083565b33610cbf61511d565b73ffffffffffffffffffffffffffffffffffffffff821660009081527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc60205260409020610d0c9061252a565b90506000610d3e82602001516bffffffffffffffffffffffff1683604001516bffffffffffffffffffffffff166125d0565b905080841115610d5557610d55610a1885836125e6565b73ffffffffffffffffffffffffffffffffffffffff831660009081527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc60205260409020610da39085612603565b610dab611407565b73ffffffffffffffffffffffffffffffffffffffff16639470b0bd84866040518363ffffffff1660e01b8152600401610de59291906154d7565b600060405180830381600087803b158015610dff57600080fd5b505af1158015610e13573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff167f85082129d87b2fe11527cb1b3b7a520aeb5aa6913f88a3d8757fe40d1db02fdd85604051610e5d9190615561565b60405180910390a250505050565b601660205260009081526040902080546001820154600283015460038401546004909401549293919290919085565b600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dcb31f766040518163ffffffff1660e01b815260040160206040518083038186803b158015610f0557600080fd5b505afa158015610f19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f3d91908101906151fe565b91505090565b610f4b61511d565b6000828152600760205260409020610c829061252a565b610f6a61268a565b610f73816126d1565b50565b610f7e61511d565b610fcc60056000846001811115610f9157fe5b60ff1681526020808201929092526040908101600090812073ffffffffffffffffffffffffffffffffffffffff88168252909252902061252a565b90505b92915050565b610fdd61513d565b506000908152601560209081526040808320600c548452825291829020825160608101845281548152600182015492810192909252600201549181019190915290565b6002818154811061102d57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b61105c61515e565b506000908152600a602090815260409182902082518084019093525473ffffffffffffffffffffffffffffffffffffffff8116835274010000000000000000000000000000000000000000900463ffffffff169082015290565b601980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600d5481565b338161110f57506112fb565b600061111e6020860186615362565b600181111561112957fe5b14801561114d575060006111406020850185615362565b600181111561114b57fe5b145b1561115857506112fb565b60016111676020860186615362565b600181111561117257fe5b14156111875761118784602001358284612802565b60016111966020850185615362565b60018111156111a157fe5b14156111b6576111b68360200135828461289b565b60006005816111c86020880188615362565b60018111156111d357fe5b60ff1681526020808201929092526040908101600090812073ffffffffffffffffffffffffffffffffffffffff861682528352908120925090600590829061121d90880188615362565b600181111561122857fe5b60ff1681526020808201929092526040908101600090812073ffffffffffffffffffffffffffffffffffffffff871682529092529020905061126b828286612934565b60208086013590870180359073ffffffffffffffffffffffffffffffffffffffff8616907f7d3ad1dcf03b9027064d1d9a474a69e0cecc31324c541d3eb9b5e6fa2f106c8d9088906112bd908c615362565b60018111156112c857fe5b6112d560208c018c615362565b60018111156112e057fe5b6040516112ef939291906157cd565b60405180910390a45050505b505050565b60106020526000908152604090205460ff1681565b8161131f81612a2d565b6000838152600a602052604090205474010000000000000000000000000000000000000000900463ffffffff16611357848285612a66565b6000848152600a60205260409081902080547fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000063ffffffff8716021790555184907f8ea2a7a959bd25f226b7b0a4393613f7fdcaa8404e8bad96aa52dc1c1459016790610e5d90849087906157f7565b601154601254601354601454929363ffffffff9283169391928281169264010000000090041690565b600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639051c3ee6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f0557600080fd5b60115481565b600854600090339061149190600163ffffffff612aad16565b600881905591506114a682620f424086612a66565b6114ae61515e565b5060408051808201825273ffffffffffffffffffffffffffffffffffffffff838116825263ffffffff87811660208085019182526000888152600a9091528590208451815492517fffffffffffffffffffffffff00000000000000000000000000000000000000009093169416939093177fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000919092160217905590517fcec6fc86ea644053f6edff1160dfe3fa5c61e7a5ef9f873f145bb03a0bd319e7906115929085908590899061556a565b60405180910390a183156115a9576115a983611bda565b505092915050565b6115b961268a565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff166115f2576115f2610a1882612ac9565b60005b600254811015611662578173ffffffffffffffffffffffffffffffffffffffff166002828154811061162357fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561165a576116558282612b68565b611662565b6001016115f5565b5050565b600c5481565b60145463ffffffff1681565b6116806122c7565b73ffffffffffffffffffffffffffffffffffffffff811660009081526010602052604090205460ff16156116bc576116bc610a186000836122ea565b73ffffffffffffffffffffffffffffffffffffffff81166000908152601060205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517f3e535d1ab441ef41c268fd9b52b478aee02d693c5ca2a84b5d26b89e0922e5e190610a9890839061545e565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60195473ffffffffffffffffffffffffffffffffffffffff1681565b61177a61268a565b6116628282612b68565b61178c6122c7565b6117998585858585612db7565b3073ffffffffffffffffffffffffffffffffffffffff1663c6f3a4276040518163ffffffff1660e01b815260040160006040518083038186803b1580156117df57600080fd5b505afa1580156117f3573d6000803e3d6000fd5b505050505050505050565b60135481565b3360009081526010602052604090205460ff1661182757611827610a1833612e7a565b61183081612e95565b3461190a5761183d610e9a565b73ffffffffffffffffffffffffffffffffffffffff166323b872dd8330846040518463ffffffff1660e01b8152600401611879939291906154a6565b602060405180830381600087803b15801561189357600080fd5b505af11580156118a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506118cb91908101906152bd565b61190a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190190615684565b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600960205260409020548061193b57506112fb565b600061194682610f43565b602001516bffffffffffffffffffffffff16905060135481101561196b5750506112fb565b600c54600083815260156020908152604080832084845282528083206016909252909120815480611a1a576000806119a38888612eb6565b6002870182905560018701819055600386015491935091506119cb908263ffffffff612aad16565b60038501556001808501546119e59163ffffffff612aad16565b6001850155604051889087907f14b098103235344975b17508c2391721cc9ac3f3fa2b56c7ff46f8480dfd074f90600090a350505b611a2a818863ffffffff612aad16565b83556002820154611a41908863ffffffff612aad16565b8260020181905550505050505050505050565b60085481565b33611a63611407565b73ffffffffffffffffffffffffffffffffffffffff166315cc36f282846040518363ffffffff1660e01b8152600401611a9d9291906154d7565b600060405180830381600087803b158015611ab757600080fd5b505af1158015611acb573d6000803e3d6000fd5b5050505073ffffffffffffffffffffffffffffffffffffffff811660009081527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc60205260409020611b1d9083612f42565b8073ffffffffffffffffffffffffffffffffffffffff167febedb8b3c678666e7f36970bc8f57abf6d8fa2e828c0da91ea5b75bf68ed101a83604051611b639190615561565b60405180910390a25050565b601880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60175481565b6000611bd5601154600d54612aad90919063ffffffff16565b905090565b3360008181526009602052604080822084905551839183917f5640833634fce74eb9211d1209a91dd5a1c8c6a751696bff9323b4db67f815139190a35050565b610f738133612fac565b60016020526000908152604090205460ff1681565b6000611c4361515e565b506000828152600a6020908152604080832081518083019092525473ffffffffffffffffffffffffffffffffffffffff8116825274010000000000000000000000000000000000000000900463ffffffff16918101919091529080611ca785613184565b91509150611cba83602001518383613241565b5095945050505050565b600b6020526000908152604090205481565b60606002805480602002602001604051908101604052809291908181526020018280548015611d3b57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611d10575b5050505050905090565b60185473ffffffffffffffffffffffffffffffffffffffff1681565b60125463ffffffff1681565b611d756122c7565b611d7d613282565b611d85613295565b565b611d8f61511d565b60016000526004602052611dc27fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe0561252a565b90506000826001811115611dd257fe5b1415610c85576000611de2611407565b73ffffffffffffffffffffffffffffffffffffffff16639706e0c06040518163ffffffff1660e01b815260040160206040518083038186803b158015611e2757600080fd5b505afa158015611e3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611e5f91908101906153bb565b9050611e8e611e8983602001516bffffffffffffffffffffffff168361239490919063ffffffff16565b6132c0565b6bffffffffffffffffffffffff90811660208401526040830151611ebe91611e899184911663ffffffff61239416565b6bffffffffffffffffffffffff16604083015250919050565b601454640100000000900463ffffffff1681565b6000611ef561515e565b506000838152600a6020908152604080832081518083019092525473ffffffffffffffffffffffffffffffffffffffff8116825274010000000000000000000000000000000000000000900463ffffffff16918101919091529080611f5986613184565b915091506000611f6e84602001518484613241565b915050611f7d878783856132e4565b979650505050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b60096020526000908152604090205481565b611fbe61511d565b73ffffffffffffffffffffffffffffffffffffffff831660009081526006602090815260408083208584529091529020610fcc9061252a565b611fff61268a565b73ffffffffffffffffffffffffffffffffffffffff811661202a57612025610a18613431565b610f73565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b600c5460006120b082600163ffffffff61239416565b90506120ba6150ee565b50600081815260166020908152604091829020825160a0810184528154815260018201549281018390526002820154938101939093526003810154606084015260040154608083015261210f57505050610f73565b61211761513d565b50600084815260156020908152604080832085845282529182902082516060810184528154808252600183015493820193909352600290910154928101929092526121655750505050610f73565b60008581526015602090815260408083208684529091528120818155600181018290556002018190556121988284613468565b90506000806121ac888486604001516134dd565b9150915087877ff1116b309178aa62dcb6bf8c3b8bc2321724907c7ebf52192d14c8ce3aa9194c84846040516121e39291906155ac565b60405180910390a360006121fd838363ffffffff612aad16565b6080870151909150612215908263ffffffff612aad16565b6080870181905260008881526016602090815260409091206004019190915586015161224890600163ffffffff61239416565b602080880182815260008a81526016909252604090912060010191909155516117f3576080860151865188917fb463d19ecf455be65365092cf8e1db6934a0334cf8cd532ddf9964d01f36b5b2916122a6908263ffffffff61239416565b6040516122b49291906155ac565b60405180910390a2505050505050505050565b3360009081526001602052604090205460ff16611d8557611d85610a183361362d565b606063b9588e4360e01b83836040516024016123079291906155f4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905092915050565b805160208201fd5b6000828211156123ad576123ad610a1860028585613648565b50900390565b606063614b800a60e01b83836040516024016123079291906155ac565b30318015610f73576123e0610e9a565b73ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561242757600080fd5b505af115801561243b573d6000803e3d6000fd5b505050505050565b6000611bd5601754612453610e9a565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161248b919061545e565b60206040518083038186803b1580156124a357600080fd5b505afa1580156124b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506124db91908101906153bb565b9063ffffffff61239416565b4260006124f2611bbc565b90508181111561250957612509610a1882846136ed565b600c5460009061252090600163ffffffff612aad16565b600c555050600d55565b61253261511d565b5060408051606081018252825467ffffffffffffffff81168083526bffffffffffffffffffffffff680100000000000000008304811660208501527401000000000000000000000000000000000000000090920490911692820192909252600c5490918111156125ca576125a58161370a565b67ffffffffffffffff16825260408201516bffffffffffffffffffffffff1660208301525b50919050565b60008183106125df5781610fcc565b5090919050565b60606384c8b7c960e01b83836040516024016123079291906155ac565b61260b61511d565b6126148361252a565b905061263e611e898383604001516bffffffffffffffffffffffff1661239490919063ffffffff16565b6bffffffffffffffffffffffff9081166040830152602082015161266d91611e8991168463ffffffff61239416565b6bffffffffffffffffffffffff1660208201526112fb838261372a565b60005473ffffffffffffffffffffffffffffffffffffffff163314611d8557600054611d8590610a1890339073ffffffffffffffffffffffffffffffffffffffff166137e4565b73ffffffffffffffffffffffffffffffffffffffff81166126f7576126f7610a18613801565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff161561273157612731610a1882613838565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b61280b83613853565b6128158383612fac565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600660209081526040808320868452909152902061284f908261388a565b6000838152600760205260409020612867908261388a565b600160005260046020526112fb7fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe058261388a565b6128a483613853565b6128ae8383612fac565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260066020908152604080832086845290915290206128e890826138e2565b600083815260076020526040902061290090826138e2565b600160005260046020526112fb7fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe05826138e2565b61293e838361391d565b15612948576112fb565b61295061511d565b6129598461252a565b905061296361511d565b61296c8461252a565b905081604001516bffffffffffffffffffffffff168311156129a7576129a7610a188484604001516bffffffffffffffffffffffff166125e6565b60408201516129ce90611e89906bffffffffffffffffffffffff168563ffffffff61239416565b6bffffffffffffffffffffffff9081166040808501919091528201516129ff91611e8991168563ffffffff612aad16565b6bffffffffffffffffffffffff166040820152612a1c858361372a565b612a26848261372a565b5050505050565b6000818152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1633811461166257611662610a183384613924565b620f424063ffffffff82161115612a8b57612a86610a1860008584613941565b6112fb565b8163ffffffff168163ffffffff16106112fb576112fb610a1860018584613941565b600082820183811015610fcc57610fcc610a1860008686613648565b606063eb5108a260e01b82604051602401612ae4919061545e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050919050565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff16612ba157612ba1610a1883612ac9565b6002548110612bbc57612bbc610a1882600280549050613960565b8173ffffffffffffffffffffffffffffffffffffffff1660028281548110612be057fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614612c4257612c42610a1860028381548110612c1a57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff168461397d565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110612cbd57fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff9092169183908110612cf057fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190612d6f9082615175565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b60118590556012805463ffffffff8087167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000092831617909255601385905560148054848416640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff9487169190931617929092161790556040517f613157dbb0e920deab8ad6ddd3805e87cbf57344b9fe780f1764790ec789754290612e6b90879087908790879087906157a2565b60405180910390a15050505050565b606063b56d2df060e01b82604051602401612ae4919061545e565b803414158015612ea457503415155b15610f7357610f73610a18823461399a565b6000828152600a602052604081205481908190612ee99073ffffffffffffffffffffffffffffffffffffffff1686611fb6565b602001516bffffffffffffffffffffffff169050612f0d848263ffffffff61239416565b601254909350612f3890612f2b9063ffffffff16620f4240866139b7565b829063ffffffff612aad16565b9150509250929050565b612f4a61511d565b612f538361252a565b9050612f7d611e898383604001516bffffffffffffffffffffffff16612aad90919063ffffffff16565b6bffffffffffffffffffffffff9081166040830152602082015161266d91611e8991168463ffffffff612aad16565b612fb5826139d9565b6000612fc483836000806132e4565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260066020908152604080832087845290915290209091506130009061252a565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600660209081526040808320888452825291829020845181549286015195909301517fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090921667ffffffffffffffff909316929092177fffffffffffffffffffffffff000000000000000000000000ffffffffffffffff16680100000000000000006bffffffffffffffffffffffff9586160217909216740100000000000000000000000000000000000000009390921692909202179055801561317b576130e58382613a4d565b6130ed610e9a565b73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016131279291906154d7565b602060405180830381600087803b15801561314157600080fd5b505af1158015613155573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061317991908101906152bd565b505b6112fb83613a95565b600080600061319f6001600c5461239490919063ffffffff16565b90506131a961513d565b50600084815260156020908152604080832084845282528083208151606080820184528254825260018084015483870152600293840154838601528787526016865295849020845160a0810186528154815296810154958701959095529184015492850192909252600383015490840152600490910154608083015290613231908290613468565b9350806040015192505050915091565b600080826132515783915061327a565b61326563ffffffff8616620f424086613aa2565b9150613277848363ffffffff61239416565b90505b935093915050565b61328a613ad8565b42600d556001600c55565b61329d613aed565b620d2f00620dbba068056bc75e2d6310000060026003612a268585858585612db7565b806bffffffffffffffffffffffff81168114610c8557610c85610a18600284613b52565b600c546000906132f261511d565b5073ffffffffffffffffffffffffffffffffffffffff851660009081526006602090815260408083208984528252918290208251606081018452905467ffffffffffffffff81168083526bffffffffffffffffffffffff680100000000000000008304811694840194909452740100000000000000000000000000000000000000009091049092169281019290925282141561339357600092505050613429565b61339f81838787613b6f565b81519093506000906133c29067ffffffffffffffff16600163ffffffff612aad16565b90506134006133f38984602001516bffffffffffffffffffffffff16856000015167ffffffffffffffff1685613bf2565b859063ffffffff612aad16565b93506134236133f38984604001516bffffffffffffffffffffffff168487613bf2565b93505050505b949350505050565b60408051808201909152600481527fe69edc3e00000000000000000000000000000000000000000000000000000000602082015290565b815160009061347657610fcf565b815183516040840151602086015160608601516014546134ac95949392919063ffffffff80821691640100000000900416613c8b565b608083015183519192506000916134c89163ffffffff61239416565b9050818110156134d6578091505b5092915050565b6000806134e861515e565b506000858152600a602090815260409182902082518084019093525473ffffffffffffffffffffffffffffffffffffffff8116835274010000000000000000000000000000000000000000900463ffffffff1690820181905261354c908686613241565b909350915082156136095761355f610e9a565b81516040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff929092169163a9059cbb916135b59187906004016154d7565b602060405180830381600087803b1580156135cf57600080fd5b505af11580156135e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061360791908101906152bd565b505b8115613624576136198683613d4e565b613624868386613d8f565b50935093915050565b606063b65a25b960e01b82604051602401612ae4919061545e565b606063e946c1bb60e01b848484604051602401613667939291906155ba565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290509392505050565b606063a6bcde4760e01b83836040516024016123079291906155ac565b8067ffffffffffffffff81168114610c8557610c85610a18600184613b52565b8051825460408301516020909301516bffffffffffffffffffffffff90811668010000000000000000027fffffffffffffffffffffffff000000000000000000000000ffffffffffffffff91909416740100000000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff67ffffffffffffffff9094167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090931692909217929092161716179055565b6060631de45ad160e01b838360405160240161230792919061547f565b60408051808201909152600481527f57654fe400000000000000000000000000000000000000000000000000000000602082015290565b606063de16f1a060e01b82604051602401612ae4919061545e565b6000818152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff16610f7357610f73610a18826000613e78565b61389261511d565b61389b8361252a565b90506138c5611e898383604001516bffffffffffffffffffffffff1661239490919063ffffffff16565b6bffffffffffffffffffffffff1660408201526112fb838261372a565b6138ea61511d565b6138f38361252a565b90506138c5611e898383604001516bffffffffffffffffffffffff16612aad90919063ffffffff16565b1460011690565b60606382ded78560e01b83836040516024016123079291906154d7565b60606322df959760e01b84848460405160240161366793929190615626565b606063e9f8377160e01b83836040516024016123079291906155ac565b606063140a84db60e01b838360405160240161230792919061547f565b60606331d7a50560e01b83836040516024016123079291906155ac565b6000613429836139cd868563ffffffff613e9516565b9063ffffffff613ec616565b600c546000906139f090600163ffffffff61239416565b90506139fa61513d565b5060008281526015602090815260408083208484528252918290208251606081018452815480825260018301549382019390935260029091015492810192909252156112fb576112fb610a188484613ef0565b6000828152600b6020526040902054613a6c908263ffffffff61239416565b6000838152600b6020526040902055601754613a8e908263ffffffff61239416565b6017555050565b610f738160006001613d8f565b6000613429836139cd613abc82600163ffffffff61239416565b613acc888763ffffffff613e9516565b9063ffffffff612aad16565b600d5415611d8557611d85610a186000613f0d565b60115415801590613b05575060125463ffffffff1615155b8015613b12575060135415155b8015613b25575060145463ffffffff1615155b8015613b405750601454640100000000900463ffffffff1615155b15611d8557611d85610a186001613f0d565b606063c996af7b60e01b83836040516024016123079291906155dc565b6000821580613b7c575081155b15613b8957506000613429565b6000613b9c85600163ffffffff61239416565b865167ffffffffffffffff161015613bb8578560400151613bbe565b85602001515b6bffffffffffffffffffffffff16905080613bdd576000915050613429565b613be88484836139b7565b9695505050505050565b6000831580613c0057508183145b15613c0d57506000613429565b818310613c46576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119019061564d565b613c4e615199565b613c588685613f4c565b9050613c62615199565b613c6c8785613f4c565b9050611f7d81600001518260200151846000015185602001518a61406a565b600080613c9888886140f6565b90506000613ca687876140f6565b9050811580613cb3575080155b15613cc4575060009150611f7d9050565b600081831315613cdd57613cd88284614148565b613ce7565b613ce78383614148565b9050613d10613d0b613cf883614167565b8863ffffffff168863ffffffff16614809565b614818565b905081831315613d2957613d248282614148565b613d33565b613d338282614e02565b9050613d3f818c614e2e565b9b9a5050505050505050505050565b6000828152600b6020526040902054613d6d908263ffffffff612aad16565b6000838152600b6020526040902055601754613a8e908263ffffffff612aad16565b6000838152600f6020526040902054600c5480821415613db05750506112fb565b613db8615199565b506000858152600e602090815260408083208584528252918290208251808401909352805483526001015490820152613def615199565b613df882614e70565b15613e3157613e11826000015183602001518888614e79565b60208301819052818352613e259190614edb565b60208301528152613e3c565b602081018590528581525b6000878152600e6020908152604080832086845282528083208451815593820151600190940193909355978152600f9097529095205550505050565b6060639ae94f0160e01b838360405160240161230792919061559c565b600082613ea457506000610fcf565b82820282848281613eb157fe5b0414610fcc57610fcc610a1860018686613648565b600081613edc57613edc610a1860038585613648565b6000828481613ee757fe5b04949350505050565b6060635caa0b0560e01b83836040516024016123079291906155ac565b60607f0b02d77300000000000000000000000000000000000000000000000000000000826001811115613f3c57fe5b604051602401612ae4919061580e565b613f54615199565b506000828152600e602090815260408083208484528252918290208251808401909352805483526001015490820152613f8c81614e70565b15613f9657610fcf565b6000613fa983600163ffffffff61239416565b6000858152600e60209081526040808320848452825291829020825180840190935280548352600101549082015292509050613fe482614e70565b15613fef5750610fcf565b6000848152600f60205260409020548381101561404c576000858152600e602090815260408083208484528252918290208251808401909352805483526001015490820152925061403f83614e70565b1561404c5750610fcf9050565b50506040805180820190915260008152600160208201529392505050565b600081614079575060006140ed565b8361409957614092856139cd848963ffffffff613e9516565b90506140ed565b60006140be6140ae868863ffffffff613e9516565b6124db898763ffffffff613e9516565b905060006140d2828663ffffffff613ec616565b90506140e8876139cd868463ffffffff613e9516565b925050505b95945050505050565b60008083121561410e5761410e610a18600185614f04565b600082121561412557614125610a18600184614f04565b610fcc614142846f80000000000000000000000000000000614f45565b83614f8d565b6000610fcc614142846f80000000000000000000000000000000614f45565b60006f8000000000000000000000000000000082131561418f5761418f610a1860018461500e565b600082136141a5576141a5610a1860008461500e565b6f800000000000000000000000000000008214156141c557506000610c85565b640733048c5a82136141f857507fffffffffffffffffffffffffffffffe010000000000000000000000000000000610c85565b60008060006a01c8464f761647600000008513614257577ffffffffffffffffffffffffffffffff000000000000000000000000000000000909301926a01c8464f761647600000006f8000000000000000000000000000000086020594505b6cf1aaddd7742e9000000000000085136142b5577ffffffffffffffffffffffffffffffff800000000000000000000000000000000909301926cf1aaddd7742e900000000000006f8000000000000000000000000000000086020594505b6e0afe10820813d780000000000000008513614317577ffffffffffffffffffffffffffffffffc00000000000000000000000000000000909301926e0afe10820813d780000000000000006f8000000000000000000000000000000086020594505b6f02582ab704279ec00000000000000000851361437b577ffffffffffffffffffffffffffffffffe00000000000000000000000000000000909301926f02582ab704279ec000000000000000006f8000000000000000000000000000000086020594505b6f1152aaa3bf81cc00000000000000000085136143df577fffffffffffffffffffffffffffffffff00000000000000000000000000000000909301926f1152aaa3bf81cc0000000000000000006f8000000000000000000000000000000086020594505b6f2f16ac6c59de700000000000000000008513614443577fffffffffffffffffffffffffffffffff80000000000000000000000000000000909301926f2f16ac6c59de700000000000000000006f8000000000000000000000000000000086020594505b6f4da2cbf1be582800000000000000000085136144a7577fffffffffffffffffffffffffffffffffc0000000000000000000000000000000909301926f4da2cbf1be58280000000000000000006f8000000000000000000000000000000086020594505b6f63afbe7ab2082c000000000000000000851361450b577fffffffffffffffffffffffffffffffffe0000000000000000000000000000000909301926f63afbe7ab2082c0000000000000000006f8000000000000000000000000000000086020594505b6f70f5a893b608861e1f58934f97aea57d851361456f577ffffffffffffffffffffffffffffffffff0000000000000000000000000000000909301926f70f5a893b608861e1f58934f97aea57d6f8000000000000000000000000000000086020594505b7fffffffffffffffffffffffffffffffff80000000000000000000000000000000850192508291506f80000000000000000000000000000000828002059050700100000000000000000000000000000000838103830205840193506f80000000000000000000000000000000818302816145e557fe5b059150700200000000000000000000000000000000836faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0383028161461657fe5b05840193506f800000000000000000000000000000008183028161463657fe5b059150700300000000000000000000000000000000836f999999999999999999999999999999990383028161466757fe5b05840193506f800000000000000000000000000000008183028161468757fe5b059150700400000000000000000000000000000000836f92492492492492492492492492492492038302816146b857fe5b05840193506f80000000000000000000000000000000818302816146d857fe5b059150700500000000000000000000000000000000836f8e38e38e38e38e38e38e38e38e38e38e0383028161470957fe5b05840193506f800000000000000000000000000000008183028161472957fe5b059150700600000000000000000000000000000000836f8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8b0383028161475a57fe5b05840193506f800000000000000000000000000000008183028161477a57fe5b059150700700000000000000000000000000000000836f89d89d89d89d89d89d89d89d89d89d89038302816147ab57fe5b05840193506f80000000000000000000000000000000818302816147cb57fe5b059150700800000000000000000000000000000000836f88888888888888888888888888888888038302816147fc57fe5b0584019350505050919050565b60006134296141428585614f45565b60007fffffffffffffffffffffffffffffffe01000000000000000000000000000000082121561484a57506000610c85565b8161486657506f80000000000000000000000000000000610c85565b600082131561487d5761487d610a1860018461500e565b6f800000000000000000000000000000006f1000000000000000000000000000000083078080028290056710e1b3be415a0000810293909301929091818302059050806705a0913f6b1e000002830192506f80000000000000000000000000000000828202816148e957fe5b05905080670168244fdac7800002830192506f800000000000000000000000000000008282028161491657fe5b05905080664807432bc1800002830192506f800000000000000000000000000000008282028161494257fe5b05905080660c0135dca0400002830192506f800000000000000000000000000000008282028161496e57fe5b059050806601b707b1cdc00002830192506f800000000000000000000000000000008282028161499a57fe5b059050806536e0f639b80002830192506f80000000000000000000000000000000828202816149c557fe5b05905080650618fee9f80002830192506f80000000000000000000000000000000828202816149f057fe5b05905080649c197dcc0002830192506f8000000000000000000000000000000082820281614a1a57fe5b05905080640e30dce40002830192506f8000000000000000000000000000000082820281614a4457fe5b0590508064012ebd130002830192506f8000000000000000000000000000000082820281614a6e57fe5b059050806317499f0002830192506f8000000000000000000000000000000082820281614a9757fe5b059050806301a9d48002830192506f8000000000000000000000000000000082820281614ac057fe5b05905080621c638002830192506f8000000000000000000000000000000082820281614ae857fe5b059050806201c63802830192506f8000000000000000000000000000000082820281614b1057fe5b05905080611ab802830192506f8000000000000000000000000000000082820281614b3757fe5b0590508061017c02830192506f8000000000000000000000000000000082820281614b5e57fe5b05905080601402830192506f8000000000000000000000000000000082820281614b8457fe5b600095909503946721c3677c82b400009190059384010582016f8000000000000000000000000000000001929050701000000000000000000000000000000000841615614bf3577243cbaf42a000812488fc5c220ad7b97bf6e99e6cf1aaddd7742e56d32fb9f9974484020592505b700800000000000000000000000000000000841615614c35577105d27a9f51c31b7c2f8038212a05747799916e0afe10820813d65dfe6a33c07f738f84020592505b700400000000000000000000000000000000841615614c7757701b4c902e273a58678d6d3bfdb93db96d026f02582ab704279e8efd15e0265855c47a84020592505b700200000000000000000000000000000000841615614cb9577003b1cc971a9bb5b9867477440d6d1577506f1152aaa3bf81cb9fdb76eae12d02957184020592505b700100000000000000000000000000000000841615614cfb5770015bf0a8b1457695355fb8ac404e7a79e36f2f16ac6c59de6f8d5d6f63c1482a7c8684020592505b6f80000000000000000000000000000000841615614d3b576fd3094c70f034de4b96ff7d5b6f99fcd86f4da2cbf1be5827f9eb3ad1aa9866ebb384020592505b6f40000000000000000000000000000000841615614d7b576fa45af1e1f40c333b3de1db4dd55f29a76f63afbe7ab2082ba1a0ae5e4eb1b479dc84020592505b6f20000000000000000000000000000000841615614dbb576f910b022db7ae67ce76b441c27035c6a16f70f5a893b608861e1f58934f97aea57d84020592505b6f10000000000000000000000000000000841615614dfb576f88415abbe9a76bead8d00cf112e4d4a86f783eafef1c0a8f3978c7f81824d62ebf84020592505b5050919050565b60006f80000000000000000000000000000000614e1f8484614f45565b81614e2657fe5b059392505050565b600080821215614e4657614e46610a18600184614f04565b6000614e528484614f45565b905060008113614e66576000915050610fcf565b607f1c9392505050565b60200151151590565b60008085614e8b575082905081614ed2565b83614e9a575084905083614ed2565b614ebd614ead858763ffffffff613e9516565b613acc888663ffffffff613e9516565b9150614ecf858463ffffffff613e9516565b90505b94509492505050565b600080614ef984846f8000000000000000000000000000000061503d565b915091509250929050565b60607fbd79545f00000000000000000000000000000000000000000000000000000000836001811115614f3357fe5b8360405160240161230792919061581c565b600082614f5457506000610fcf565b5081810281838281614f6257fe5b05141580614f79575082828281614f7557fe5b0514155b15610fcf57610fcf610a18600185856150ab565b600081614fa357614fa3610a18600285856150ab565b7f800000000000000000000000000000000000000000000000000000000000000083148015614ff15750817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff145b1561500557615005610a18600385856150ab565b818381614e2657fe5b60607fed2f26a100000000000000000000000000000000000000000000000000000000836001811115614f3357fe5b6000808285118061504d57508284115b156150a2576000848610156150625784615064565b855b9050615076818563ffffffff613ec616565b9050615088868263ffffffff613ec616565b925061509a858263ffffffff613ec616565b91505061327a565b50929391925050565b60607f8c12dfe7000000000000000000000000000000000000000000000000000000008460038111156150da57fe5b84846040516024016136679392919061582f565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b60405180606001604052806000815260200160008152602001600081525090565b604080518082019091526000808252602082015290565b8154818355818111156112fb576000838152602090206112fb9181019083016151b3565b604051806040016040528060008152602001600081525090565b610bed91905b808211156151cd57600081556001016151b9565b5090565b6000604082840312156125ca578081fd5b6000602082840312156151f3578081fd5b8135610fcc81615854565b60006020828403121561520f578081fd5b8151610fcc81615854565b60008060006060848603121561522e578182fd5b833561523981615854565b9250602084013561524981615854565b929592945050506040919091013590565b6000806040838503121561526c578182fd5b823561527781615854565b946020939093013593505050565b60008060408385031215615297578182fd5b82356152a281615854565b915060208301356152b281615884565b809150509250929050565b6000602082840312156152ce578081fd5b8151610fcc81615876565b6000602082840312156152ea578081fd5b5035919050565b60008060408385031215615303578182fd5b8235915060208301356152b281615854565b60008060408385031215615327578182fd5b50508035926020909101359150565b60008060408385031215615348578182fd5b82359150602083013563ffffffff811681146152b2578182fd5b600060208284031215615373578081fd5b8135610fcc81615884565b600080600060a08486031215615392578283fd5b61539c85856151d1565b92506153ab85604086016151d1565b9150608084013590509250925092565b6000602082840312156153cc578081fd5b5051919050565b600080600080600060a086880312156153ea578283fd5b8535945060208601356153fc81615891565b935060408601359250606086013561541381615891565b9150608086013561542381615891565b809150509295509295909350565b60008060408385031215615443578182fd5b823561544e81615891565b915060208301356152b281615876565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b602080825282518282018190526000918401906040840190835b8181101561554b57835173ffffffffffffffffffffffffffffffffffffffff16835260209384019390920191600101615517565b509095945050505050565b901515815260200190565b90815260200190565b92835273ffffffffffffffffffffffffffffffffffffffff91909116602083015263ffffffff16604082015260600190565b9182521515602082015260400190565b918252602082015260400190565b60608101600485106155c857fe5b938152602081019290925260409091015290565b60408101600384106155ea57fe5b9281526020015290565b604081016156018461584a565b92815273ffffffffffffffffffffffffffffffffffffffff9190911660209091015290565b606081016156338561584a565b938152602081019290925263ffffffff1660409091015290565b60208082526013908201527f43525f494e54455256414c5f494e56414c494400000000000000000000000000604082015260600190565b60208082526014908201527f574554485f5452414e534645525f4641494c4544000000000000000000000000604082015260600190565b81518152602080830151908201526040918201519181019190915260600190565b815173ffffffffffffffffffffffffffffffffffffffff16815260209182015163ffffffff169181019190915260400190565b815167ffffffffffffffff1681526020808301516bffffffffffffffffffffffff90811691830191909152604092830151169181019190915260600190565b9283526020830191909152604082015260600190565b93845260208401929092526040830152606082015260800190565b948552602085019390935260408401919091526060830152608082015260a00190565b94855263ffffffff938416602086015260408501929092528216606084015216608082015260a00190565b92835260ff918216602084015216604082015260600190565b63ffffffff91909116815260200190565b63ffffffff92831681529116602082015260400190565b60ff91909116815260200190565b60ff929092168252602082015260400190565b60ff9390931683526020830191909152604082015260600190565b60028110610f7357fe5b73ffffffffffffffffffffffffffffffffffffffff81168114610f7357600080fd5b8015158114610f7357600080fd5b60028110610f7357600080fd5b63ffffffff81168114610f7357600080fdfea365627a7a72315820cd4dcb64a07325df26d38404ffcca0f57d30f570cbe815c03c543316add5e5a46c6578706572696d656e74616cf564736f6c634300050c0040" + "object": "0x6080604052600080546001600160a01b031916331790556156ac806100256000396000f3fe6080604052600436106103295760003560e01c80638da5cb5b116101a5578063bb7ef7e0116100ec578063e8eeb3f811610095578063f18765321161006f578063f1876532146108bf578063f252b7a1146108df578063f2fde38b146108ff578063ff691b111461091f57610329565b8063e8eeb3f814610875578063e907f0031461088a578063ee99205c146108aa57610329565b8063e0ee036e116100c6578063e0ee036e1461082b578063e1c7392a14610840578063e804d0a41461085557610329565b8063bb7ef7e0146107c9578063c18c9141146107e9578063d39de6e91461080957610329565b8063a694fc3a1161014e578063b3e3337911610128578063b3e3337914610769578063b510879f14610789578063b9181611146107a957610329565b8063a694fc3a1461071f578063b05315241461073f578063b2baa33e1461075457610329565b8063a26171e21161017f578063a26171e2146106e2578063a3b4a327146106f7578063a657e5791461070a57610329565b80638da5cb5b1461068d5780639ad26744146106a25780639c3ccc82146106c257610329565b80634bcc3f6711610274578063624a72321161021d57806370712939116101f757806370712939146106165780637667180814610636578063816667961461064b5780638a2e271a1461066d57610329565b8063624a7232146105cc57806363403801146105e157806368a7d6cd146105f657610329565b80635bd4ab731161024e5780635bd4ab73146105595780635d91121d146105865780635e615a6b146105a657610329565b80634bcc3f67146104f7578063587da0231461052457806358f6c7e31461053957610329565b80633c277fc5116102d657806344a6958b116102b057806344a6958b1461048a57806346b97959146104aa578063494503d4146104d757610329565b80633c277fc51461041b5780633e4ad7321461043d57806342f1181e1461046a57610329565b80632a94c279116103075780632a94c2791461039b5780632e17de78146103ca57806338229d93146103ea57610329565b806301e28d841461032e5780630b9663db146103505780631e7ff8f61461037b575b600080fd5b34801561033a57600080fd5b5061034e610349366004614fc7565b61093f565b005b34801561035c57600080fd5b50610365610a0d565b6040516103729190615327565b60405180910390f35b34801561038757600080fd5b50610365610396366004614fc7565b610b5a565b3480156103a757600080fd5b506103bb6103b63660046150db565b610bf4565b60405161037293929190615514565b3480156103d657600080fd5b5061034e6103e536600461509f565b610c20565b3480156103f657600080fd5b5061040a61040536600461509f565b610dd5565b604051610372959493929190615545565b34801561042757600080fd5b50610430610e04565b6040516103729190615224565b34801561044957600080fd5b5061045d61045836600461509f565b610e1c565b60405161037291906154d5565b34801561047657600080fd5b5061034e610485366004614fc7565b610e3b565b34801561049657600080fd5b5061045d6104a536600461504c565b610e4f565b3480156104b657600080fd5b506104ca6104c536600461509f565b610eae565b6040516103729190615481565b3480156104e357600080fd5b506104306104f236600461509f565b610ef9565b34801561050357600080fd5b5061051761051236600461509f565b610f2d565b60405161037291906154a2565b34801561053057600080fd5b50610365610f8f565b34801561054557600080fd5b5061034e610554366004615144565b610f95565b34801561056557600080fd5b50610579610574366004614fc7565b611192565b604051610372919061531c565b34801561059257600080fd5b5061034e6105a13660046150fc565b6111a7565b3480156105b257600080fd5b506105bb611270565b604051610372959493929190615568565b3480156105d857600080fd5b50610430611299565b3480156105ed57600080fd5b506103656112b1565b34801561060257600080fd5b506103656106113660046151f7565b6112b7565b34801561062257600080fd5b5061034e610631366004614fc7565b6113f0565b34801561064257600080fd5b506103656114a5565b34801561065757600080fd5b506106606114ab565b60405161037291906155ac565b34801561067957600080fd5b5061034e610688366004614fc7565b6114b7565b34801561069957600080fd5b50610430611579565b3480156106ae57600080fd5b5061034e6106bd366004615022565b611595565b3480156106ce57600080fd5b5061034e6106dd366004615199565b6115a7565b3480156106ee57600080fd5b50610365611621565b61034e610705366004614fe2565b611627565b34801561071657600080fd5b50610365611877565b34801561072b57600080fd5b5061034e61073a36600461509f565b61187d565b34801561074b57600080fd5b50610365611992565b34801561076057600080fd5b50610365611998565b34801561077557600080fd5b5061034e61078436600461509f565b6119b6565b34801561079557600080fd5b5061034e6107a436600461509f565b6119f6565b3480156107b557600080fd5b506105796107c4366004614fc7565b611a00565b3480156107d557600080fd5b506103656107e436600461509f565b611a15565b3480156107f557600080fd5b5061036561080436600461509f565b611aa0565b34801561081557600080fd5b5061081e611ab2565b60405161037291906152c3565b34801561083757600080fd5b50610660611b21565b34801561084c57600080fd5b5061034e611b2d565b34801561086157600080fd5b5061045d610870366004615128565b611b47565b34801561088157600080fd5b50610660611c97565b34801561089657600080fd5b506103656108a53660046150b7565b611cab565b3480156108b657600080fd5b50610430611d48565b3480156108cb57600080fd5b506103656108da366004614fc7565b611d64565b3480156108eb57600080fd5b5061045d6108fa366004615022565b611d76565b34801561090b57600080fd5b5061034e61091a366004614fc7565b611db7565b34801561092b57600080fd5b5061034e61093a36600461509f565b611e5a565b610947612087565b73ffffffffffffffffffffffffffffffffffffffff811660009081526010602052604090205460ff16610987576109876109826001836120aa565b61214c565b73ffffffffffffffffffffffffffffffffffffffff81166000908152601060205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517ff50d0d312d501878616eb5e78ebf3ed6dcd3955aaef8165af9c6b057cc4832fb90610a02908390615224565b60405180910390a150565b600c5460009081610a2582600163ffffffff61215416565b6000818152601660205260409020600101549091508015610a4d57610a4d6109828383612173565b610a55612190565b610a5d612203565b600084815260166020526040902055610a74614eaf565b50600083815260166020908152604091829020825160a08101845281548082526001830154938201849052600283015482860181905260038401546060840181905260049094015460808401529451919488947fbb4a26fa0ace13ee4da343896c20eaa44a618fb9071fdd8c2e2c960a4583189d94610af6949193929161552a565b60405180910390a2610b066122a7565b6020810151610b4d57805160405185917fb463d19ecf455be65365092cf8e1db6934a0334cf8cd532ddf9964d01f36b5b291610b4491600091615372565b60405180910390a25b6020015193505050505b90565b6000610b64611299565b73ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401610b9c9190615224565b60206040518083038186803b158015610bb457600080fd5b505afa158015610bc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610bec9190810190615181565b90505b919050565b601560209081526000928352604080842090915290825290208054600182015460029092015490919083565b33610c29614ede565b73ffffffffffffffffffffffffffffffffffffffff821660009081527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc60205260409020610c76906122ea565b90506000610ca882602001516bffffffffffffffffffffffff1683604001516bffffffffffffffffffffffff16612390565b905080841115610cbf57610cbf61098285836123a6565b73ffffffffffffffffffffffffffffffffffffffff831660009081527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc60205260409020610d0d90856123c3565b610d15611299565b73ffffffffffffffffffffffffffffffffffffffff16639470b0bd84866040518363ffffffff1660e01b8152600401610d4f92919061529d565b600060405180830381600087803b158015610d6957600080fd5b505af1158015610d7d573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff167f85082129d87b2fe11527cb1b3b7a520aeb5aa6913f88a3d8757fe40d1db02fdd85604051610dc79190615327565b60405180910390a250505050565b601660205260009081526040902080546001820154600283015460038401546004909401549293919290919085565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc290565b610e24614ede565b6000828152600760205260409020610bec906122ea565b610e4361244a565b610e4c81612491565b50565b610e57614ede565b610ea560056000846001811115610e6a57fe5b60ff1681526020808201929092526040908101600090812073ffffffffffffffffffffffffffffffffffffffff8816825290925290206122ea565b90505b92915050565b610eb6614efe565b506000908152601560209081526040808320600c548452825291829020825160608101845281548152600182015492810192909252600201549181019190915290565b60028181548110610f0657fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b610f35614f1f565b506000908152600a602090815260409182902082518084019093525473ffffffffffffffffffffffffffffffffffffffff8116835274010000000000000000000000000000000000000000900463ffffffff169082015290565b600d5481565b3381610fa1575061118d565b6000610fb06020860186615128565b6001811115610fbb57fe5b148015610fdf57506000610fd26020850185615128565b6001811115610fdd57fe5b145b15610fea575061118d565b6001610ff96020860186615128565b600181111561100457fe5b141561101957611019846020013582846125c2565b60016110286020850185615128565b600181111561103357fe5b1415611048576110488360200135828461265b565b600060058161105a6020880188615128565b600181111561106557fe5b60ff1681526020808201929092526040908101600090812073ffffffffffffffffffffffffffffffffffffffff86168252835290812092509060059082906110af90880188615128565b60018111156110ba57fe5b60ff1681526020808201929092526040908101600090812073ffffffffffffffffffffffffffffffffffffffff87168252909252902090506110fd8282866126f4565b60208086013590870180359073ffffffffffffffffffffffffffffffffffffffff8616907f7d3ad1dcf03b9027064d1d9a474a69e0cecc31324c541d3eb9b5e6fa2f106c8d90889061114f908c615128565b600181111561115a57fe5b61116760208c018c615128565b600181111561117257fe5b60405161118193929190615593565b60405180910390a45050505b505050565b60106020526000908152604090205460ff1681565b816111b1816127ed565b6000838152600a602052604090205474010000000000000000000000000000000000000000900463ffffffff166111e9848285612826565b6000848152600a60205260409081902080547fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000063ffffffff8716021790555184907f8ea2a7a959bd25f226b7b0a4393613f7fdcaa8404e8bad96aa52dc1c1459016790610dc790849087906155bd565b601154601254601354601454929363ffffffff9283169391928281169264010000000090041690565b73ba7f8b5fb1b19c1211c5d49550fcd149177a5eaf90565b60115481565b60085460009033906112d090600163ffffffff61286e16565b600881905591506112e582620f424086612826565b6112ed614f1f565b5060408051808201825273ffffffffffffffffffffffffffffffffffffffff838116825263ffffffff87811660208085019182526000888152600a9091528590208451815492517fffffffffffffffffffffffff00000000000000000000000000000000000000009093169416939093177fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000919092160217905590517fcec6fc86ea644053f6edff1160dfe3fa5c61e7a5ef9f873f145bb03a0bd319e7906113d190859085908990615330565b60405180910390a183156113e8576113e8836119b6565b505092915050565b6113f861244a565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff16611431576114316109828261288a565b60005b6002548110156114a1578173ffffffffffffffffffffffffffffffffffffffff166002828154811061146257fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff161415611499576114948282612929565b6114a1565b600101611434565b5050565b600c5481565b60145463ffffffff1681565b6114bf612087565b73ffffffffffffffffffffffffffffffffffffffff811660009081526010602052604090205460ff16156114fb576114fb6109826000836120aa565b73ffffffffffffffffffffffffffffffffffffffff81166000908152601060205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517f3e535d1ab441ef41c268fd9b52b478aee02d693c5ca2a84b5d26b89e0922e5e190610a02908390615224565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b61159d61244a565b6114a18282612929565b6115af612087565b6115bc8585858585612b78565b3073ffffffffffffffffffffffffffffffffffffffff1663c6f3a4276040518163ffffffff1660e01b815260040160006040518083038186803b15801561160257600080fd5b505afa158015611616573d6000803e3d6000fd5b505050505050505050565b60135481565b3360009081526010602052604090205460ff1661164a5761164a61098233612c3b565b61165381612c56565b3461172d57611660610e04565b73ffffffffffffffffffffffffffffffffffffffff166323b872dd8330846040518463ffffffff1660e01b815260040161169c9392919061526c565b602060405180830381600087803b1580156116b657600080fd5b505af11580156116ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116ee9190810190615083565b61172d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117249061544a565b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600960205260409020548061175e575061118d565b600061176982610e1c565b602001516bffffffffffffffffffffffff16905060135481101561178e57505061118d565b600c5460008381526015602090815260408083208484528252808320601690925290912081548061183d576000806117c68888612c77565b6002870182905560018701819055600386015491935091506117ee908263ffffffff61286e16565b60038501556001808501546118089163ffffffff61286e16565b6001850155604051889087907f14b098103235344975b17508c2391721cc9ac3f3fa2b56c7ff46f8480dfd074f90600090a350505b61184d818863ffffffff61286e16565b83556002820154611864908863ffffffff61286e16565b8260020181905550505050505050505050565b60085481565b33611886611299565b73ffffffffffffffffffffffffffffffffffffffff166315cc36f282846040518363ffffffff1660e01b81526004016118c092919061529d565b600060405180830381600087803b1580156118da57600080fd5b505af11580156118ee573d6000803e3d6000fd5b5050505073ffffffffffffffffffffffffffffffffffffffff811660009081527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc602052604090206119409083612d03565b8073ffffffffffffffffffffffffffffffffffffffff167febedb8b3c678666e7f36970bc8f57abf6d8fa2e828c0da91ea5b75bf68ed101a836040516119869190615327565b60405180910390a25050565b60175481565b60006119b1601154600d5461286e90919063ffffffff16565b905090565b3360008181526009602052604080822084905551839183917f5640833634fce74eb9211d1209a91dd5a1c8c6a751696bff9323b4db67f815139190a35050565b610e4c8133612d6d565b60016020526000908152604090205460ff1681565b6000611a1f614f1f565b506000828152600a6020908152604080832081518083019092525473ffffffffffffffffffffffffffffffffffffffff8116825274010000000000000000000000000000000000000000900463ffffffff16918101919091529080611a8385612f45565b91509150611a9683602001518383613002565b5095945050505050565b600b6020526000908152604090205481565b60606002805480602002602001604051908101604052809291908181526020018280548015611b1757602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611aec575b5050505050905090565b60125463ffffffff1681565b611b35612087565b611b3d613043565b611b45613056565b565b611b4f614ede565b60016000526004602052611b827fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe056122ea565b90506000826001811115611b9257fe5b1415610bef576000611ba2611299565b73ffffffffffffffffffffffffffffffffffffffff16639706e0c06040518163ffffffff1660e01b815260040160206040518083038186803b158015611be757600080fd5b505afa158015611bfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611c1f9190810190615181565b9050611c4e611c4983602001516bffffffffffffffffffffffff168361215490919063ffffffff16565b613081565b6bffffffffffffffffffffffff90811660208401526040830151611c7e91611c499184911663ffffffff61215416565b6bffffffffffffffffffffffff16604083015250919050565b601454640100000000900463ffffffff1681565b6000611cb5614f1f565b506000838152600a6020908152604080832081518083019092525473ffffffffffffffffffffffffffffffffffffffff8116825274010000000000000000000000000000000000000000900463ffffffff16918101919091529080611d1986612f45565b915091506000611d2e84602001518484613002565b915050611d3d878783856130a5565b979650505050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b60096020526000908152604090205481565b611d7e614ede565b73ffffffffffffffffffffffffffffffffffffffff831660009081526006602090815260408083208584529091529020610ea5906122ea565b611dbf61244a565b73ffffffffffffffffffffffffffffffffffffffff8116611dea57611de56109826131f2565b610e4c565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b600c546000611e7082600163ffffffff61215416565b9050611e7a614eaf565b50600081815260166020908152604091829020825160a08101845281548152600182015492810183905260028201549381019390935260038101546060840152600401546080830152611ecf57505050610e4c565b611ed7614efe565b5060008481526015602090815260408083208584528252918290208251606081018452815480825260018301549382019390935260029091015492810192909252611f255750505050610e4c565b6000858152601560209081526040808320868452909152812081815560018101829055600201819055611f588284613229565b9050600080611f6c8884866040015161329e565b9150915087877ff1116b309178aa62dcb6bf8c3b8bc2321724907c7ebf52192d14c8ce3aa9194c8484604051611fa3929190615372565b60405180910390a36000611fbd838363ffffffff61286e16565b6080870151909150611fd5908263ffffffff61286e16565b6080870181905260008881526016602090815260409091206004019190915586015161200890600163ffffffff61215416565b602080880182815260008a8152601690925260409091206001019190915551611616576080860151865188917fb463d19ecf455be65365092cf8e1db6934a0334cf8cd532ddf9964d01f36b5b291612066908263ffffffff61215416565b604051612074929190615372565b60405180910390a2505050505050505050565b3360009081526001602052604090205460ff16611b4557611b45610982336133ee565b606063b9588e4360e01b83836040516024016120c79291906153ba565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905092915050565b805160208201fd5b60008282111561216d5761216d61098260028585613409565b50900390565b606063614b800a60e01b83836040516024016120c7929190615372565b30318015610e4c576121a0610e04565b73ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156121e757600080fd5b505af11580156121fb573d6000803e3d6000fd5b505050505050565b60006119b1601754612213610e04565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161224b9190615224565b60206040518083038186803b15801561226357600080fd5b505afa158015612277573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061229b9190810190615181565b9063ffffffff61215416565b4260006122b2611998565b9050818111156122c9576122c961098282846134ae565b600c546000906122e090600163ffffffff61286e16565b600c555050600d55565b6122f2614ede565b5060408051606081018252825467ffffffffffffffff81168083526bffffffffffffffffffffffff680100000000000000008304811660208501527401000000000000000000000000000000000000000090920490911692820192909252600c54909181111561238a57612365816134cb565b67ffffffffffffffff16825260408201516bffffffffffffffffffffffff1660208301525b50919050565b600081831061239f5781610ea5565b5090919050565b60606384c8b7c960e01b83836040516024016120c7929190615372565b6123cb614ede565b6123d4836122ea565b90506123fe611c498383604001516bffffffffffffffffffffffff1661215490919063ffffffff16565b6bffffffffffffffffffffffff9081166040830152602082015161242d91611c4991168463ffffffff61215416565b6bffffffffffffffffffffffff16602082015261118d83826134eb565b60005473ffffffffffffffffffffffffffffffffffffffff163314611b4557600054611b459061098290339073ffffffffffffffffffffffffffffffffffffffff166135a5565b73ffffffffffffffffffffffffffffffffffffffff81166124b7576124b76109826135c2565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff16156124f1576124f1610982826135f9565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b6125cb83613614565b6125d58383612d6d565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600660209081526040808320868452909152902061260f908261364b565b6000838152600760205260409020612627908261364b565b6001600052600460205261118d7fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe058261364b565b61266483613614565b61266e8383612d6d565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260066020908152604080832086845290915290206126a890826136a3565b60008381526007602052604090206126c090826136a3565b6001600052600460205261118d7fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe05826136a3565b6126fe83836136de565b156127085761118d565b612710614ede565b612719846122ea565b9050612723614ede565b61272c846122ea565b905081604001516bffffffffffffffffffffffff16831115612767576127676109828484604001516bffffffffffffffffffffffff166123a6565b604082015161278e90611c49906bffffffffffffffffffffffff168563ffffffff61215416565b6bffffffffffffffffffffffff9081166040808501919091528201516127bf91611c4991168563ffffffff61286e16565b6bffffffffffffffffffffffff1660408201526127dc85836134eb565b6127e684826134eb565b5050505050565b6000818152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff163381146114a1576114a161098233846136e5565b620f424063ffffffff8216111561284b5761284661098260008584613702565b61118d565b8163ffffffff168163ffffffff16111561118d5761118d61098260018584613702565b600082820183811015610ea557610ea561098260008686613409565b606063eb5108a260e01b826040516024016128a59190615224565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050919050565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff16612962576129626109828361288a565b600254811061297d5761297d61098282600280549050613721565b8173ffffffffffffffffffffffffffffffffffffffff16600282815481106129a157fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614612a0357612a03610982600283815481106129db57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff168461373e565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110612a7e57fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff9092169183908110612ab157fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190612b309082614f36565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b60118590556012805463ffffffff8087167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000092831617909255601385905560148054848416640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff9487169190931617929092161790556040517f613157dbb0e920deab8ad6ddd3805e87cbf57344b9fe780f1764790ec789754290612c2c9087908790879087908790615568565b60405180910390a15050505050565b606063b56d2df060e01b826040516024016128a59190615224565b803414158015612c6557503415155b15610e4c57610e4c610982823461375b565b6000828152600a602052604081205481908190612caa9073ffffffffffffffffffffffffffffffffffffffff1686611d76565b602001516bffffffffffffffffffffffff169050612cce848263ffffffff61215416565b601254909350612cf990612cec9063ffffffff16620f424086613778565b829063ffffffff61286e16565b9150509250929050565b612d0b614ede565b612d14836122ea565b9050612d3e611c498383604001516bffffffffffffffffffffffff1661286e90919063ffffffff16565b6bffffffffffffffffffffffff9081166040830152602082015161242d91611c4991168463ffffffff61286e16565b612d768261379a565b6000612d8583836000806130a5565b73ffffffffffffffffffffffffffffffffffffffff831660009081526006602090815260408083208784529091529020909150612dc1906122ea565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600660209081526040808320888452825291829020845181549286015195909301517fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090921667ffffffffffffffff909316929092177fffffffffffffffffffffffff000000000000000000000000ffffffffffffffff16680100000000000000006bffffffffffffffffffffffff95861602179092167401000000000000000000000000000000000000000093909216929092021790558015612f3c57612ea6838261380e565b612eae610e04565b73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401612ee892919061529d565b602060405180830381600087803b158015612f0257600080fd5b505af1158015612f16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612f3a9190810190615083565b505b61118d83613856565b6000806000612f606001600c5461215490919063ffffffff16565b9050612f6a614efe565b50600084815260156020908152604080832084845282528083208151606080820184528254825260018084015483870152600293840154838601528787526016865295849020845160a0810186528154815296810154958701959095529184015492850192909252600383015490840152600490910154608083015290612ff2908290613229565b9350806040015192505050915091565b600080826130125783915061303b565b61302663ffffffff8616620f424086613863565b9150613038848363ffffffff61215416565b90505b935093915050565b61304b613899565b42600d556001600c55565b61305e6138ae565b620d2f00620dbba068056bc75e2d63100000600260036127e68585858585612b78565b806bffffffffffffffffffffffff81168114610bef57610bef610982600284613913565b600c546000906130b3614ede565b5073ffffffffffffffffffffffffffffffffffffffff851660009081526006602090815260408083208984528252918290208251606081018452905467ffffffffffffffff81168083526bffffffffffffffffffffffff6801000000000000000083048116948401949094527401000000000000000000000000000000000000000090910490921692810192909252821415613154576000925050506131ea565b61316081838787613930565b81519093506000906131839067ffffffffffffffff16600163ffffffff61286e16565b90506131c16131b48984602001516bffffffffffffffffffffffff16856000015167ffffffffffffffff16856139b3565b859063ffffffff61286e16565b93506131e46131b48984604001516bffffffffffffffffffffffff1684876139b3565b93505050505b949350505050565b60408051808201909152600481527fe69edc3e00000000000000000000000000000000000000000000000000000000602082015290565b815160009061323757610ea8565b8151835160408401516020860151606086015160145461326d95949392919063ffffffff80821691640100000000900416613a4c565b608083015183519192506000916132899163ffffffff61215416565b905081811015613297578091505b5092915050565b6000806132a9614f1f565b506000858152600a602090815260409182902082518084019093525473ffffffffffffffffffffffffffffffffffffffff8116835274010000000000000000000000000000000000000000900463ffffffff1690820181905261330d908686613002565b909350915082156133ca57613320610e04565b81516040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff929092169163a9059cbb9161337691879060040161529d565b602060405180830381600087803b15801561339057600080fd5b505af11580156133a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506133c89190810190615083565b505b81156133e5576133da8683613b0f565b6133e5868386613b50565b50935093915050565b606063b65a25b960e01b826040516024016128a59190615224565b606063e946c1bb60e01b84848460405160240161342893929190615380565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290509392505050565b606063a6bcde4760e01b83836040516024016120c7929190615372565b8067ffffffffffffffff81168114610bef57610bef610982600184613913565b8051825460408301516020909301516bffffffffffffffffffffffff90811668010000000000000000027fffffffffffffffffffffffff000000000000000000000000ffffffffffffffff91909416740100000000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff67ffffffffffffffff9094167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090931692909217929092161716179055565b6060631de45ad160e01b83836040516024016120c7929190615245565b60408051808201909152600481527f57654fe400000000000000000000000000000000000000000000000000000000602082015290565b606063de16f1a060e01b826040516024016128a59190615224565b6000818152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff16610e4c57610e4c610982826000613c39565b613653614ede565b61365c836122ea565b9050613686611c498383604001516bffffffffffffffffffffffff1661215490919063ffffffff16565b6bffffffffffffffffffffffff16604082015261118d83826134eb565b6136ab614ede565b6136b4836122ea565b9050613686611c498383604001516bffffffffffffffffffffffff1661286e90919063ffffffff16565b1460011690565b60606382ded78560e01b83836040516024016120c792919061529d565b60606322df959760e01b848484604051602401613428939291906153ec565b606063e9f8377160e01b83836040516024016120c7929190615372565b606063140a84db60e01b83836040516024016120c7929190615245565b60606331d7a50560e01b83836040516024016120c7929190615372565b60006131ea8361378e868563ffffffff613c5616565b9063ffffffff613c8716565b600c546000906137b190600163ffffffff61215416565b90506137bb614efe565b50600082815260156020908152604080832084845282529182902082516060810184528154808252600183015493820193909352600290910154928101929092521561118d5761118d6109828484613cb1565b6000828152600b602052604090205461382d908263ffffffff61215416565b6000838152600b602052604090205560175461384f908263ffffffff61215416565b6017555050565b610e4c8160006001613b50565b60006131ea8361378e61387d82600163ffffffff61215416565b61388d888763ffffffff613c5616565b9063ffffffff61286e16565b600d5415611b4557611b456109826000613cce565b601154158015906138c6575060125463ffffffff1615155b80156138d3575060135415155b80156138e6575060145463ffffffff1615155b80156139015750601454640100000000900463ffffffff1615155b15611b4557611b456109826001613cce565b606063c996af7b60e01b83836040516024016120c79291906153a2565b600082158061393d575081155b1561394a575060006131ea565b600061395d85600163ffffffff61215416565b865167ffffffffffffffff16101561397957856040015161397f565b85602001515b6bffffffffffffffffffffffff1690508061399e5760009150506131ea565b6139a9848483613778565b9695505050505050565b60008315806139c157508183145b156139ce575060006131ea565b818310613a07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172490615413565b613a0f614f5a565b613a198685613d0d565b9050613a23614f5a565b613a2d8785613d0d565b9050611d3d81600001518260200151846000015185602001518a613e2b565b600080613a598888613eb7565b90506000613a678787613eb7565b9050811580613a74575080155b15613a85575060009150611d3d9050565b600081831315613a9e57613a998284613f09565b613aa8565b613aa88383613f09565b9050613ad1613acc613ab983613f28565b8863ffffffff168863ffffffff166145ca565b6145d9565b905081831315613aea57613ae58282613f09565b613af4565b613af48282614bc3565b9050613b00818c614bef565b9b9a5050505050505050505050565b6000828152600b6020526040902054613b2e908263ffffffff61286e16565b6000838152600b602052604090205560175461384f908263ffffffff61286e16565b6000838152600f6020526040902054600c5480821415613b7157505061118d565b613b79614f5a565b506000858152600e602090815260408083208584528252918290208251808401909352805483526001015490820152613bb0614f5a565b613bb982614c31565b15613bf257613bd2826000015183602001518888614c3a565b60208301819052818352613be69190614c9c565b60208301528152613bfd565b602081018590528581525b6000878152600e6020908152604080832086845282528083208451815593820151600190940193909355978152600f9097529095205550505050565b6060639ae94f0160e01b83836040516024016120c7929190615362565b600082613c6557506000610ea8565b82820282848281613c7257fe5b0414610ea557610ea561098260018686613409565b600081613c9d57613c9d61098260038585613409565b6000828481613ca857fe5b04949350505050565b6060635caa0b0560e01b83836040516024016120c7929190615372565b60607f0b02d77300000000000000000000000000000000000000000000000000000000826001811115613cfd57fe5b6040516024016128a591906155d4565b613d15614f5a565b506000828152600e602090815260408083208484528252918290208251808401909352805483526001015490820152613d4d81614c31565b15613d5757610ea8565b6000613d6a83600163ffffffff61215416565b6000858152600e60209081526040808320848452825291829020825180840190935280548352600101549082015292509050613da582614c31565b15613db05750610ea8565b6000848152600f602052604090205483811015613e0d576000858152600e6020908152604080832084845282529182902082518084019093528054835260010154908201529250613e0083614c31565b15613e0d5750610ea89050565b50506040805180820190915260008152600160208201529392505050565b600081613e3a57506000613eae565b83613e5a57613e538561378e848963ffffffff613c5616565b9050613eae565b6000613e7f613e6f868863ffffffff613c5616565b61229b898763ffffffff613c5616565b90506000613e93828663ffffffff613c8716565b9050613ea98761378e868463ffffffff613c5616565b925050505b95945050505050565b600080831215613ecf57613ecf610982600185614cc5565b6000821215613ee657613ee6610982600184614cc5565b610ea5613f03846f80000000000000000000000000000000614d06565b83614d4e565b6000610ea5613f03846f80000000000000000000000000000000614d06565b60006f80000000000000000000000000000000821315613f5057613f50610982600184614dcf565b60008213613f6657613f66610982600084614dcf565b6f80000000000000000000000000000000821415613f8657506000610bef565b640733048c5a8213613fb957507fffffffffffffffffffffffffffffffe010000000000000000000000000000000610bef565b60008060006a01c8464f761647600000008513614018577ffffffffffffffffffffffffffffffff000000000000000000000000000000000909301926a01c8464f761647600000006f8000000000000000000000000000000086020594505b6cf1aaddd7742e900000000000008513614076577ffffffffffffffffffffffffffffffff800000000000000000000000000000000909301926cf1aaddd7742e900000000000006f8000000000000000000000000000000086020594505b6e0afe10820813d7800000000000000085136140d8577ffffffffffffffffffffffffffffffffc00000000000000000000000000000000909301926e0afe10820813d780000000000000006f8000000000000000000000000000000086020594505b6f02582ab704279ec00000000000000000851361413c577ffffffffffffffffffffffffffffffffe00000000000000000000000000000000909301926f02582ab704279ec000000000000000006f8000000000000000000000000000000086020594505b6f1152aaa3bf81cc00000000000000000085136141a0577fffffffffffffffffffffffffffffffff00000000000000000000000000000000909301926f1152aaa3bf81cc0000000000000000006f8000000000000000000000000000000086020594505b6f2f16ac6c59de700000000000000000008513614204577fffffffffffffffffffffffffffffffff80000000000000000000000000000000909301926f2f16ac6c59de700000000000000000006f8000000000000000000000000000000086020594505b6f4da2cbf1be58280000000000000000008513614268577fffffffffffffffffffffffffffffffffc0000000000000000000000000000000909301926f4da2cbf1be58280000000000000000006f8000000000000000000000000000000086020594505b6f63afbe7ab2082c00000000000000000085136142cc577fffffffffffffffffffffffffffffffffe0000000000000000000000000000000909301926f63afbe7ab2082c0000000000000000006f8000000000000000000000000000000086020594505b6f70f5a893b608861e1f58934f97aea57d8513614330577ffffffffffffffffffffffffffffffffff0000000000000000000000000000000909301926f70f5a893b608861e1f58934f97aea57d6f8000000000000000000000000000000086020594505b7fffffffffffffffffffffffffffffffff80000000000000000000000000000000850192508291506f80000000000000000000000000000000828002059050700100000000000000000000000000000000838103830205840193506f80000000000000000000000000000000818302816143a657fe5b059150700200000000000000000000000000000000836faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa038302816143d757fe5b05840193506f80000000000000000000000000000000818302816143f757fe5b059150700300000000000000000000000000000000836f999999999999999999999999999999990383028161442857fe5b05840193506f800000000000000000000000000000008183028161444857fe5b059150700400000000000000000000000000000000836f924924924924924924924924924924920383028161447957fe5b05840193506f800000000000000000000000000000008183028161449957fe5b059150700500000000000000000000000000000000836f8e38e38e38e38e38e38e38e38e38e38e038302816144ca57fe5b05840193506f80000000000000000000000000000000818302816144ea57fe5b059150700600000000000000000000000000000000836f8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8b0383028161451b57fe5b05840193506f800000000000000000000000000000008183028161453b57fe5b059150700700000000000000000000000000000000836f89d89d89d89d89d89d89d89d89d89d890383028161456c57fe5b05840193506f800000000000000000000000000000008183028161458c57fe5b059150700800000000000000000000000000000000836f88888888888888888888888888888888038302816145bd57fe5b0584019350505050919050565b60006131ea613f038585614d06565b60007fffffffffffffffffffffffffffffffe01000000000000000000000000000000082121561460b57506000610bef565b8161462757506f80000000000000000000000000000000610bef565b600082131561463e5761463e610982600184614dcf565b6f800000000000000000000000000000006f1000000000000000000000000000000083078080028290056710e1b3be415a0000810293909301929091818302059050806705a0913f6b1e000002830192506f80000000000000000000000000000000828202816146aa57fe5b05905080670168244fdac7800002830192506f80000000000000000000000000000000828202816146d757fe5b05905080664807432bc1800002830192506f800000000000000000000000000000008282028161470357fe5b05905080660c0135dca0400002830192506f800000000000000000000000000000008282028161472f57fe5b059050806601b707b1cdc00002830192506f800000000000000000000000000000008282028161475b57fe5b059050806536e0f639b80002830192506f800000000000000000000000000000008282028161478657fe5b05905080650618fee9f80002830192506f80000000000000000000000000000000828202816147b157fe5b05905080649c197dcc0002830192506f80000000000000000000000000000000828202816147db57fe5b05905080640e30dce40002830192506f800000000000000000000000000000008282028161480557fe5b0590508064012ebd130002830192506f800000000000000000000000000000008282028161482f57fe5b059050806317499f0002830192506f800000000000000000000000000000008282028161485857fe5b059050806301a9d48002830192506f800000000000000000000000000000008282028161488157fe5b05905080621c638002830192506f80000000000000000000000000000000828202816148a957fe5b059050806201c63802830192506f80000000000000000000000000000000828202816148d157fe5b05905080611ab802830192506f80000000000000000000000000000000828202816148f857fe5b0590508061017c02830192506f800000000000000000000000000000008282028161491f57fe5b05905080601402830192506f800000000000000000000000000000008282028161494557fe5b600095909503946721c3677c82b400009190059384010582016f80000000000000000000000000000000019290507010000000000000000000000000000000008416156149b4577243cbaf42a000812488fc5c220ad7b97bf6e99e6cf1aaddd7742e56d32fb9f9974484020592505b7008000000000000000000000000000000008416156149f6577105d27a9f51c31b7c2f8038212a05747799916e0afe10820813d65dfe6a33c07f738f84020592505b700400000000000000000000000000000000841615614a3857701b4c902e273a58678d6d3bfdb93db96d026f02582ab704279e8efd15e0265855c47a84020592505b700200000000000000000000000000000000841615614a7a577003b1cc971a9bb5b9867477440d6d1577506f1152aaa3bf81cb9fdb76eae12d02957184020592505b700100000000000000000000000000000000841615614abc5770015bf0a8b1457695355fb8ac404e7a79e36f2f16ac6c59de6f8d5d6f63c1482a7c8684020592505b6f80000000000000000000000000000000841615614afc576fd3094c70f034de4b96ff7d5b6f99fcd86f4da2cbf1be5827f9eb3ad1aa9866ebb384020592505b6f40000000000000000000000000000000841615614b3c576fa45af1e1f40c333b3de1db4dd55f29a76f63afbe7ab2082ba1a0ae5e4eb1b479dc84020592505b6f20000000000000000000000000000000841615614b7c576f910b022db7ae67ce76b441c27035c6a16f70f5a893b608861e1f58934f97aea57d84020592505b6f10000000000000000000000000000000841615614bbc576f88415abbe9a76bead8d00cf112e4d4a86f783eafef1c0a8f3978c7f81824d62ebf84020592505b5050919050565b60006f80000000000000000000000000000000614be08484614d06565b81614be757fe5b059392505050565b600080821215614c0757614c07610982600184614cc5565b6000614c138484614d06565b905060008113614c27576000915050610ea8565b607f1c9392505050565b60200151151590565b60008085614c4c575082905081614c93565b83614c5b575084905083614c93565b614c7e614c6e858763ffffffff613c5616565b61388d888663ffffffff613c5616565b9150614c90858463ffffffff613c5616565b90505b94509492505050565b600080614cba84846f80000000000000000000000000000000614dfe565b915091509250929050565b60607fbd79545f00000000000000000000000000000000000000000000000000000000836001811115614cf457fe5b836040516024016120c79291906155e2565b600082614d1557506000610ea8565b5081810281838281614d2357fe5b05141580614d3a575082828281614d3657fe5b0514155b15610ea857610ea861098260018585614e6c565b600081614d6457614d6461098260028585614e6c565b7f800000000000000000000000000000000000000000000000000000000000000083148015614db25750817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff145b15614dc657614dc661098260038585614e6c565b818381614be757fe5b60607fed2f26a100000000000000000000000000000000000000000000000000000000836001811115614cf457fe5b60008082851180614e0e57508284115b15614e6357600084861015614e235784614e25565b855b9050614e37818563ffffffff613c8716565b9050614e49868263ffffffff613c8716565b9250614e5b858263ffffffff613c8716565b91505061303b565b50929391925050565b60607f8c12dfe700000000000000000000000000000000000000000000000000000000846003811115614e9b57fe5b8484604051602401613428939291906155f5565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b60405180606001604052806000815260200160008152602001600081525090565b604080518082019091526000808252602082015290565b81548183558181111561118d5760008381526020902061118d918101908301614f74565b604051806040016040528060008152602001600081525090565b610b5791905b80821115614f8e5760008155600101614f7a565b5090565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ea857600080fd5b60006040828403121561238a578081fd5b600060208284031215614fd8578081fd5b610ea58383614f92565b600080600060608486031215614ff6578182fd5b83356150018161561a565b925060208401356150118161561a565b929592945050506040919091013590565b60008060408385031215615034578182fd5b61503e8484614f92565b946020939093013593505050565b6000806040838503121561505e578182fd5b6150688484614f92565b915060208301356150788161564a565b809150509250929050565b600060208284031215615094578081fd5b8151610ea58161563c565b6000602082840312156150b0578081fd5b5035919050565b600080604083850312156150c9578182fd5b8235915060208301356150788161561a565b600080604083850312156150ed578182fd5b50508035926020909101359150565b6000806040838503121561510e578182fd5b82359150602083013563ffffffff81168114615078578182fd5b600060208284031215615139578081fd5b8135610ea58161564a565b600080600060a08486031215615158578283fd5b6151628585614fb6565b92506151718560408601614fb6565b9150608084013590509250925092565b600060208284031215615192578081fd5b5051919050565b600080600080600060a086880312156151b0578283fd5b8535945060208601356151c281615657565b93506040860135925060608601356151d981615657565b915060808601356151e981615657565b809150509295509295909350565b60008060408385031215615209578182fd5b823561521481615657565b915060208301356150788161563c565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b602080825282518282018190526000918401906040840190835b8181101561531157835173ffffffffffffffffffffffffffffffffffffffff168352602093840193909201916001016152dd565b509095945050505050565b901515815260200190565b90815260200190565b92835273ffffffffffffffffffffffffffffffffffffffff91909116602083015263ffffffff16604082015260600190565b9182521515602082015260400190565b918252602082015260400190565b606081016004851061538e57fe5b938152602081019290925260409091015290565b60408101600384106153b057fe5b9281526020015290565b604081016153c784615610565b92815273ffffffffffffffffffffffffffffffffffffffff9190911660209091015290565b606081016153f985615610565b938152602081019290925263ffffffff1660409091015290565b60208082526013908201527f43525f494e54455256414c5f494e56414c494400000000000000000000000000604082015260600190565b60208082526014908201527f574554485f5452414e534645525f4641494c4544000000000000000000000000604082015260600190565b81518152602080830151908201526040918201519181019190915260600190565b815173ffffffffffffffffffffffffffffffffffffffff16815260209182015163ffffffff169181019190915260400190565b815167ffffffffffffffff1681526020808301516bffffffffffffffffffffffff90811691830191909152604092830151169181019190915260600190565b9283526020830191909152604082015260600190565b93845260208401929092526040830152606082015260800190565b948552602085019390935260408401919091526060830152608082015260a00190565b94855263ffffffff938416602086015260408501929092528216606084015216608082015260a00190565b92835260ff918216602084015216604082015260600190565b63ffffffff91909116815260200190565b63ffffffff92831681529116602082015260400190565b60ff91909116815260200190565b60ff929092168252602082015260400190565b60ff9390931683526020830191909152604082015260600190565b60028110610e4c57fe5b73ffffffffffffffffffffffffffffffffffffffff81168114610e4c57600080fd5b8015158114610e4c57600080fd5b60028110610e4c57600080fd5b63ffffffff81168114610e4c57600080fdfea365627a7a723158205024e9d661fc969de54dcf3c94b2f323b81b2f191fbdfed639fa0724cfd2f6a96c6578706572696d656e74616cf564736f6c634300050c0040" }, "deployedBytecode": { - "object": "0x6080604052600436106103555760003560e01c80639051c3ee116101bb578063bb7ef7e0116100f7578063e8eeb3f811610095578063f18765321161006f578063f187653214610955578063f252b7a114610975578063f2fde38b14610995578063ff691b11146109b557610355565b8063e8eeb3f81461090b578063e907f00314610920578063ee99205c1461094057610355565b8063dcb31f76116100d1578063dcb31f76146108ac578063e0ee036e146108c1578063e1c7392a146108d6578063e804d0a4146108eb57610355565b8063bb7ef7e01461084a578063c18c91411461086a578063d39de6e91461088a57610355565b8063a694fc3a11610164578063b2baa33e1161013e578063b2baa33e146107d5578063b3e33379146107ea578063b510879f1461080a578063b91816111461082a57610355565b8063a694fc3a14610780578063abe0906a146107a0578063b0531524146107c057610355565b8063a26171e211610195578063a26171e214610743578063a3b4a32714610758578063a657e5791461076b57610355565b80639051c3ee146106ee5780639ad26744146107035780639c3ccc821461072357610355565b80634e67339f116102955780636340380111610233578063766718081161020d578063766718081461068257806381666796146106975780638a2e271a146106b95780638da5cb5b146106d957610355565b8063634038011461062d57806368a7d6cd14610642578063707129391461066257610355565b80635bd4ab731161026f5780635bd4ab73146105a55780635d91121d146105d25780635e615a6b146105f2578063624a72321461061857610355565b80634e67339f14610550578063587da0231461057057806358f6c7e31461058557610355565b80633c277fc51161030257806344a6958b116102dc57806344a6958b146104b657806346b97959146104d6578063494503d4146105035780634bcc3f671461052357610355565b80633c277fc5146104475780633e4ad7321461046957806342f1181e1461049657610355565b80632a94c279116103335780632a94c279146103c75780632e17de78146103f657806338229d931461041657610355565b806301e28d841461035a5780630b9663db1461037c5780631e7ff8f6146103a7575b600080fd5b34801561036657600080fd5b5061037a6103753660046151e2565b6109d5565b005b34801561038857600080fd5b50610391610aa3565b60405161039e9190615561565b60405180910390f35b3480156103b357600080fd5b506103916103c23660046151e2565b610bf0565b3480156103d357600080fd5b506103e76103e2366004615315565b610c8a565b60405161039e9392919061574e565b34801561040257600080fd5b5061037a6104113660046152d9565b610cb6565b34801561042257600080fd5b506104366104313660046152d9565b610e6b565b60405161039e95949392919061577f565b34801561045357600080fd5b5061045c610e9a565b60405161039e919061545e565b34801561047557600080fd5b506104896104843660046152d9565b610f43565b60405161039e919061570f565b3480156104a257600080fd5b5061037a6104b13660046151e2565b610f62565b3480156104c257600080fd5b506104896104d1366004615285565b610f76565b3480156104e257600080fd5b506104f66104f13660046152d9565b610fd5565b60405161039e91906156bb565b34801561050f57600080fd5b5061045c61051e3660046152d9565b611020565b34801561052f57600080fd5b5061054361053e3660046152d9565b611054565b60405161039e91906156dc565b34801561055c57600080fd5b5061037a61056b3660046151e2565b6110b6565b34801561057c57600080fd5b506103916110fd565b34801561059157600080fd5b5061037a6105a036600461537e565b611103565b3480156105b157600080fd5b506105c56105c03660046151e2565b611300565b60405161039e9190615556565b3480156105de57600080fd5b5061037a6105ed366004615336565b611315565b3480156105fe57600080fd5b506106076113de565b60405161039e9594939291906157a2565b34801561062457600080fd5b5061045c611407565b34801561063957600080fd5b50610391611472565b34801561064e57600080fd5b5061039161065d366004615431565b611478565b34801561066e57600080fd5b5061037a61067d3660046151e2565b6115b1565b34801561068e57600080fd5b50610391611666565b3480156106a357600080fd5b506106ac61166c565b60405161039e91906157e6565b3480156106c557600080fd5b5061037a6106d43660046151e2565b611678565b3480156106e557600080fd5b5061045c61173a565b3480156106fa57600080fd5b5061045c611756565b34801561070f57600080fd5b5061037a61071e36600461525a565b611772565b34801561072f57600080fd5b5061037a61073e3660046153d3565b611784565b34801561074f57600080fd5b506103916117fe565b61037a61076636600461521a565b611804565b34801561077757600080fd5b50610391611a54565b34801561078c57600080fd5b5061037a61079b3660046152d9565b611a5a565b3480156107ac57600080fd5b5061037a6107bb3660046151e2565b611b6f565b3480156107cc57600080fd5b50610391611bb6565b3480156107e157600080fd5b50610391611bbc565b3480156107f657600080fd5b5061037a6108053660046152d9565b611bda565b34801561081657600080fd5b5061037a6108253660046152d9565b611c1a565b34801561083657600080fd5b506105c56108453660046151e2565b611c24565b34801561085657600080fd5b506103916108653660046152d9565b611c39565b34801561087657600080fd5b506103916108853660046152d9565b611cc4565b34801561089657600080fd5b5061089f611cd6565b60405161039e91906154fd565b3480156108b857600080fd5b5061045c611d45565b3480156108cd57600080fd5b506106ac611d61565b3480156108e257600080fd5b5061037a611d6d565b3480156108f757600080fd5b50610489610906366004615362565b611d87565b34801561091757600080fd5b506106ac611ed7565b34801561092c57600080fd5b5061039161093b3660046152f1565b611eeb565b34801561094c57600080fd5b5061045c611f88565b34801561096157600080fd5b506103916109703660046151e2565b611fa4565b34801561098157600080fd5b5061048961099036600461525a565b611fb6565b3480156109a157600080fd5b5061037a6109b03660046151e2565b611ff7565b3480156109c157600080fd5b5061037a6109d03660046152d9565b61209a565b6109dd6122c7565b73ffffffffffffffffffffffffffffffffffffffff811660009081526010602052604090205460ff16610a1d57610a1d610a186001836122ea565b61238c565b73ffffffffffffffffffffffffffffffffffffffff81166000908152601060205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517ff50d0d312d501878616eb5e78ebf3ed6dcd3955aaef8165af9c6b057cc4832fb90610a9890839061545e565b60405180910390a150565b600c5460009081610abb82600163ffffffff61239416565b6000818152601660205260409020600101549091508015610ae357610ae3610a1883836123b3565b610aeb6123d0565b610af3612443565b600084815260166020526040902055610b0a6150ee565b50600083815260166020908152604091829020825160a08101845281548082526001830154938201849052600283015482860181905260038401546060840181905260049094015460808401529451919488947fbb4a26fa0ace13ee4da343896c20eaa44a618fb9071fdd8c2e2c960a4583189d94610b8c9491939291615764565b60405180910390a2610b9c6124e7565b6020810151610be357805160405185917fb463d19ecf455be65365092cf8e1db6934a0334cf8cd532ddf9964d01f36b5b291610bda916000916155ac565b60405180910390a25b6020015193505050505b90565b6000610bfa611407565b73ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401610c32919061545e565b60206040518083038186803b158015610c4a57600080fd5b505afa158015610c5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c8291908101906153bb565b90505b919050565b601560209081526000928352604080842090915290825290208054600182015460029092015490919083565b33610cbf61511d565b73ffffffffffffffffffffffffffffffffffffffff821660009081527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc60205260409020610d0c9061252a565b90506000610d3e82602001516bffffffffffffffffffffffff1683604001516bffffffffffffffffffffffff166125d0565b905080841115610d5557610d55610a1885836125e6565b73ffffffffffffffffffffffffffffffffffffffff831660009081527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc60205260409020610da39085612603565b610dab611407565b73ffffffffffffffffffffffffffffffffffffffff16639470b0bd84866040518363ffffffff1660e01b8152600401610de59291906154d7565b600060405180830381600087803b158015610dff57600080fd5b505af1158015610e13573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff167f85082129d87b2fe11527cb1b3b7a520aeb5aa6913f88a3d8757fe40d1db02fdd85604051610e5d9190615561565b60405180910390a250505050565b601660205260009081526040902080546001820154600283015460038401546004909401549293919290919085565b600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dcb31f766040518163ffffffff1660e01b815260040160206040518083038186803b158015610f0557600080fd5b505afa158015610f19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f3d91908101906151fe565b91505090565b610f4b61511d565b6000828152600760205260409020610c829061252a565b610f6a61268a565b610f73816126d1565b50565b610f7e61511d565b610fcc60056000846001811115610f9157fe5b60ff1681526020808201929092526040908101600090812073ffffffffffffffffffffffffffffffffffffffff88168252909252902061252a565b90505b92915050565b610fdd61513d565b506000908152601560209081526040808320600c548452825291829020825160608101845281548152600182015492810192909252600201549181019190915290565b6002818154811061102d57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b61105c61515e565b506000908152600a602090815260409182902082518084019093525473ffffffffffffffffffffffffffffffffffffffff8116835274010000000000000000000000000000000000000000900463ffffffff169082015290565b601980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600d5481565b338161110f57506112fb565b600061111e6020860186615362565b600181111561112957fe5b14801561114d575060006111406020850185615362565b600181111561114b57fe5b145b1561115857506112fb565b60016111676020860186615362565b600181111561117257fe5b14156111875761118784602001358284612802565b60016111966020850185615362565b60018111156111a157fe5b14156111b6576111b68360200135828461289b565b60006005816111c86020880188615362565b60018111156111d357fe5b60ff1681526020808201929092526040908101600090812073ffffffffffffffffffffffffffffffffffffffff861682528352908120925090600590829061121d90880188615362565b600181111561122857fe5b60ff1681526020808201929092526040908101600090812073ffffffffffffffffffffffffffffffffffffffff871682529092529020905061126b828286612934565b60208086013590870180359073ffffffffffffffffffffffffffffffffffffffff8616907f7d3ad1dcf03b9027064d1d9a474a69e0cecc31324c541d3eb9b5e6fa2f106c8d9088906112bd908c615362565b60018111156112c857fe5b6112d560208c018c615362565b60018111156112e057fe5b6040516112ef939291906157cd565b60405180910390a45050505b505050565b60106020526000908152604090205460ff1681565b8161131f81612a2d565b6000838152600a602052604090205474010000000000000000000000000000000000000000900463ffffffff16611357848285612a66565b6000848152600a60205260409081902080547fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000063ffffffff8716021790555184907f8ea2a7a959bd25f226b7b0a4393613f7fdcaa8404e8bad96aa52dc1c1459016790610e5d90849087906157f7565b601154601254601354601454929363ffffffff9283169391928281169264010000000090041690565b600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639051c3ee6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f0557600080fd5b60115481565b600854600090339061149190600163ffffffff612aad16565b600881905591506114a682620f424086612a66565b6114ae61515e565b5060408051808201825273ffffffffffffffffffffffffffffffffffffffff838116825263ffffffff87811660208085019182526000888152600a9091528590208451815492517fffffffffffffffffffffffff00000000000000000000000000000000000000009093169416939093177fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000919092160217905590517fcec6fc86ea644053f6edff1160dfe3fa5c61e7a5ef9f873f145bb03a0bd319e7906115929085908590899061556a565b60405180910390a183156115a9576115a983611bda565b505092915050565b6115b961268a565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff166115f2576115f2610a1882612ac9565b60005b600254811015611662578173ffffffffffffffffffffffffffffffffffffffff166002828154811061162357fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561165a576116558282612b68565b611662565b6001016115f5565b5050565b600c5481565b60145463ffffffff1681565b6116806122c7565b73ffffffffffffffffffffffffffffffffffffffff811660009081526010602052604090205460ff16156116bc576116bc610a186000836122ea565b73ffffffffffffffffffffffffffffffffffffffff81166000908152601060205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517f3e535d1ab441ef41c268fd9b52b478aee02d693c5ca2a84b5d26b89e0922e5e190610a9890839061545e565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60195473ffffffffffffffffffffffffffffffffffffffff1681565b61177a61268a565b6116628282612b68565b61178c6122c7565b6117998585858585612db7565b3073ffffffffffffffffffffffffffffffffffffffff1663c6f3a4276040518163ffffffff1660e01b815260040160006040518083038186803b1580156117df57600080fd5b505afa1580156117f3573d6000803e3d6000fd5b505050505050505050565b60135481565b3360009081526010602052604090205460ff1661182757611827610a1833612e7a565b61183081612e95565b3461190a5761183d610e9a565b73ffffffffffffffffffffffffffffffffffffffff166323b872dd8330846040518463ffffffff1660e01b8152600401611879939291906154a6565b602060405180830381600087803b15801561189357600080fd5b505af11580156118a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506118cb91908101906152bd565b61190a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190190615684565b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600960205260409020548061193b57506112fb565b600061194682610f43565b602001516bffffffffffffffffffffffff16905060135481101561196b5750506112fb565b600c54600083815260156020908152604080832084845282528083206016909252909120815480611a1a576000806119a38888612eb6565b6002870182905560018701819055600386015491935091506119cb908263ffffffff612aad16565b60038501556001808501546119e59163ffffffff612aad16565b6001850155604051889087907f14b098103235344975b17508c2391721cc9ac3f3fa2b56c7ff46f8480dfd074f90600090a350505b611a2a818863ffffffff612aad16565b83556002820154611a41908863ffffffff612aad16565b8260020181905550505050505050505050565b60085481565b33611a63611407565b73ffffffffffffffffffffffffffffffffffffffff166315cc36f282846040518363ffffffff1660e01b8152600401611a9d9291906154d7565b600060405180830381600087803b158015611ab757600080fd5b505af1158015611acb573d6000803e3d6000fd5b5050505073ffffffffffffffffffffffffffffffffffffffff811660009081527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc60205260409020611b1d9083612f42565b8073ffffffffffffffffffffffffffffffffffffffff167febedb8b3c678666e7f36970bc8f57abf6d8fa2e828c0da91ea5b75bf68ed101a83604051611b639190615561565b60405180910390a25050565b601880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60175481565b6000611bd5601154600d54612aad90919063ffffffff16565b905090565b3360008181526009602052604080822084905551839183917f5640833634fce74eb9211d1209a91dd5a1c8c6a751696bff9323b4db67f815139190a35050565b610f738133612fac565b60016020526000908152604090205460ff1681565b6000611c4361515e565b506000828152600a6020908152604080832081518083019092525473ffffffffffffffffffffffffffffffffffffffff8116825274010000000000000000000000000000000000000000900463ffffffff16918101919091529080611ca785613184565b91509150611cba83602001518383613241565b5095945050505050565b600b6020526000908152604090205481565b60606002805480602002602001604051908101604052809291908181526020018280548015611d3b57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611d10575b5050505050905090565b60185473ffffffffffffffffffffffffffffffffffffffff1681565b60125463ffffffff1681565b611d756122c7565b611d7d613282565b611d85613295565b565b611d8f61511d565b60016000526004602052611dc27fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe0561252a565b90506000826001811115611dd257fe5b1415610c85576000611de2611407565b73ffffffffffffffffffffffffffffffffffffffff16639706e0c06040518163ffffffff1660e01b815260040160206040518083038186803b158015611e2757600080fd5b505afa158015611e3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611e5f91908101906153bb565b9050611e8e611e8983602001516bffffffffffffffffffffffff168361239490919063ffffffff16565b6132c0565b6bffffffffffffffffffffffff90811660208401526040830151611ebe91611e899184911663ffffffff61239416565b6bffffffffffffffffffffffff16604083015250919050565b601454640100000000900463ffffffff1681565b6000611ef561515e565b506000838152600a6020908152604080832081518083019092525473ffffffffffffffffffffffffffffffffffffffff8116825274010000000000000000000000000000000000000000900463ffffffff16918101919091529080611f5986613184565b915091506000611f6e84602001518484613241565b915050611f7d878783856132e4565b979650505050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b60096020526000908152604090205481565b611fbe61511d565b73ffffffffffffffffffffffffffffffffffffffff831660009081526006602090815260408083208584529091529020610fcc9061252a565b611fff61268a565b73ffffffffffffffffffffffffffffffffffffffff811661202a57612025610a18613431565b610f73565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b600c5460006120b082600163ffffffff61239416565b90506120ba6150ee565b50600081815260166020908152604091829020825160a0810184528154815260018201549281018390526002820154938101939093526003810154606084015260040154608083015261210f57505050610f73565b61211761513d565b50600084815260156020908152604080832085845282529182902082516060810184528154808252600183015493820193909352600290910154928101929092526121655750505050610f73565b60008581526015602090815260408083208684529091528120818155600181018290556002018190556121988284613468565b90506000806121ac888486604001516134dd565b9150915087877ff1116b309178aa62dcb6bf8c3b8bc2321724907c7ebf52192d14c8ce3aa9194c84846040516121e39291906155ac565b60405180910390a360006121fd838363ffffffff612aad16565b6080870151909150612215908263ffffffff612aad16565b6080870181905260008881526016602090815260409091206004019190915586015161224890600163ffffffff61239416565b602080880182815260008a81526016909252604090912060010191909155516117f3576080860151865188917fb463d19ecf455be65365092cf8e1db6934a0334cf8cd532ddf9964d01f36b5b2916122a6908263ffffffff61239416565b6040516122b49291906155ac565b60405180910390a2505050505050505050565b3360009081526001602052604090205460ff16611d8557611d85610a183361362d565b606063b9588e4360e01b83836040516024016123079291906155f4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905092915050565b805160208201fd5b6000828211156123ad576123ad610a1860028585613648565b50900390565b606063614b800a60e01b83836040516024016123079291906155ac565b30318015610f73576123e0610e9a565b73ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561242757600080fd5b505af115801561243b573d6000803e3d6000fd5b505050505050565b6000611bd5601754612453610e9a565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161248b919061545e565b60206040518083038186803b1580156124a357600080fd5b505afa1580156124b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506124db91908101906153bb565b9063ffffffff61239416565b4260006124f2611bbc565b90508181111561250957612509610a1882846136ed565b600c5460009061252090600163ffffffff612aad16565b600c555050600d55565b61253261511d565b5060408051606081018252825467ffffffffffffffff81168083526bffffffffffffffffffffffff680100000000000000008304811660208501527401000000000000000000000000000000000000000090920490911692820192909252600c5490918111156125ca576125a58161370a565b67ffffffffffffffff16825260408201516bffffffffffffffffffffffff1660208301525b50919050565b60008183106125df5781610fcc565b5090919050565b60606384c8b7c960e01b83836040516024016123079291906155ac565b61260b61511d565b6126148361252a565b905061263e611e898383604001516bffffffffffffffffffffffff1661239490919063ffffffff16565b6bffffffffffffffffffffffff9081166040830152602082015161266d91611e8991168463ffffffff61239416565b6bffffffffffffffffffffffff1660208201526112fb838261372a565b60005473ffffffffffffffffffffffffffffffffffffffff163314611d8557600054611d8590610a1890339073ffffffffffffffffffffffffffffffffffffffff166137e4565b73ffffffffffffffffffffffffffffffffffffffff81166126f7576126f7610a18613801565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff161561273157612731610a1882613838565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b61280b83613853565b6128158383612fac565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600660209081526040808320868452909152902061284f908261388a565b6000838152600760205260409020612867908261388a565b600160005260046020526112fb7fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe058261388a565b6128a483613853565b6128ae8383612fac565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260066020908152604080832086845290915290206128e890826138e2565b600083815260076020526040902061290090826138e2565b600160005260046020526112fb7fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe05826138e2565b61293e838361391d565b15612948576112fb565b61295061511d565b6129598461252a565b905061296361511d565b61296c8461252a565b905081604001516bffffffffffffffffffffffff168311156129a7576129a7610a188484604001516bffffffffffffffffffffffff166125e6565b60408201516129ce90611e89906bffffffffffffffffffffffff168563ffffffff61239416565b6bffffffffffffffffffffffff9081166040808501919091528201516129ff91611e8991168563ffffffff612aad16565b6bffffffffffffffffffffffff166040820152612a1c858361372a565b612a26848261372a565b5050505050565b6000818152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1633811461166257611662610a183384613924565b620f424063ffffffff82161115612a8b57612a86610a1860008584613941565b6112fb565b8163ffffffff168163ffffffff16106112fb576112fb610a1860018584613941565b600082820183811015610fcc57610fcc610a1860008686613648565b606063eb5108a260e01b82604051602401612ae4919061545e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050919050565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff16612ba157612ba1610a1883612ac9565b6002548110612bbc57612bbc610a1882600280549050613960565b8173ffffffffffffffffffffffffffffffffffffffff1660028281548110612be057fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614612c4257612c42610a1860028381548110612c1a57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff168461397d565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110612cbd57fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff9092169183908110612cf057fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190612d6f9082615175565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b60118590556012805463ffffffff8087167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000092831617909255601385905560148054848416640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff9487169190931617929092161790556040517f613157dbb0e920deab8ad6ddd3805e87cbf57344b9fe780f1764790ec789754290612e6b90879087908790879087906157a2565b60405180910390a15050505050565b606063b56d2df060e01b82604051602401612ae4919061545e565b803414158015612ea457503415155b15610f7357610f73610a18823461399a565b6000828152600a602052604081205481908190612ee99073ffffffffffffffffffffffffffffffffffffffff1686611fb6565b602001516bffffffffffffffffffffffff169050612f0d848263ffffffff61239416565b601254909350612f3890612f2b9063ffffffff16620f4240866139b7565b829063ffffffff612aad16565b9150509250929050565b612f4a61511d565b612f538361252a565b9050612f7d611e898383604001516bffffffffffffffffffffffff16612aad90919063ffffffff16565b6bffffffffffffffffffffffff9081166040830152602082015161266d91611e8991168463ffffffff612aad16565b612fb5826139d9565b6000612fc483836000806132e4565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260066020908152604080832087845290915290209091506130009061252a565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600660209081526040808320888452825291829020845181549286015195909301517fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090921667ffffffffffffffff909316929092177fffffffffffffffffffffffff000000000000000000000000ffffffffffffffff16680100000000000000006bffffffffffffffffffffffff9586160217909216740100000000000000000000000000000000000000009390921692909202179055801561317b576130e58382613a4d565b6130ed610e9a565b73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016131279291906154d7565b602060405180830381600087803b15801561314157600080fd5b505af1158015613155573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061317991908101906152bd565b505b6112fb83613a95565b600080600061319f6001600c5461239490919063ffffffff16565b90506131a961513d565b50600084815260156020908152604080832084845282528083208151606080820184528254825260018084015483870152600293840154838601528787526016865295849020845160a0810186528154815296810154958701959095529184015492850192909252600383015490840152600490910154608083015290613231908290613468565b9350806040015192505050915091565b600080826132515783915061327a565b61326563ffffffff8616620f424086613aa2565b9150613277848363ffffffff61239416565b90505b935093915050565b61328a613ad8565b42600d556001600c55565b61329d613aed565b620d2f00620dbba068056bc75e2d6310000060026003612a268585858585612db7565b806bffffffffffffffffffffffff81168114610c8557610c85610a18600284613b52565b600c546000906132f261511d565b5073ffffffffffffffffffffffffffffffffffffffff851660009081526006602090815260408083208984528252918290208251606081018452905467ffffffffffffffff81168083526bffffffffffffffffffffffff680100000000000000008304811694840194909452740100000000000000000000000000000000000000009091049092169281019290925282141561339357600092505050613429565b61339f81838787613b6f565b81519093506000906133c29067ffffffffffffffff16600163ffffffff612aad16565b90506134006133f38984602001516bffffffffffffffffffffffff16856000015167ffffffffffffffff1685613bf2565b859063ffffffff612aad16565b93506134236133f38984604001516bffffffffffffffffffffffff168487613bf2565b93505050505b949350505050565b60408051808201909152600481527fe69edc3e00000000000000000000000000000000000000000000000000000000602082015290565b815160009061347657610fcf565b815183516040840151602086015160608601516014546134ac95949392919063ffffffff80821691640100000000900416613c8b565b608083015183519192506000916134c89163ffffffff61239416565b9050818110156134d6578091505b5092915050565b6000806134e861515e565b506000858152600a602090815260409182902082518084019093525473ffffffffffffffffffffffffffffffffffffffff8116835274010000000000000000000000000000000000000000900463ffffffff1690820181905261354c908686613241565b909350915082156136095761355f610e9a565b81516040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff929092169163a9059cbb916135b59187906004016154d7565b602060405180830381600087803b1580156135cf57600080fd5b505af11580156135e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061360791908101906152bd565b505b8115613624576136198683613d4e565b613624868386613d8f565b50935093915050565b606063b65a25b960e01b82604051602401612ae4919061545e565b606063e946c1bb60e01b848484604051602401613667939291906155ba565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290509392505050565b606063a6bcde4760e01b83836040516024016123079291906155ac565b8067ffffffffffffffff81168114610c8557610c85610a18600184613b52565b8051825460408301516020909301516bffffffffffffffffffffffff90811668010000000000000000027fffffffffffffffffffffffff000000000000000000000000ffffffffffffffff91909416740100000000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff67ffffffffffffffff9094167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090931692909217929092161716179055565b6060631de45ad160e01b838360405160240161230792919061547f565b60408051808201909152600481527f57654fe400000000000000000000000000000000000000000000000000000000602082015290565b606063de16f1a060e01b82604051602401612ae4919061545e565b6000818152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff16610f7357610f73610a18826000613e78565b61389261511d565b61389b8361252a565b90506138c5611e898383604001516bffffffffffffffffffffffff1661239490919063ffffffff16565b6bffffffffffffffffffffffff1660408201526112fb838261372a565b6138ea61511d565b6138f38361252a565b90506138c5611e898383604001516bffffffffffffffffffffffff16612aad90919063ffffffff16565b1460011690565b60606382ded78560e01b83836040516024016123079291906154d7565b60606322df959760e01b84848460405160240161366793929190615626565b606063e9f8377160e01b83836040516024016123079291906155ac565b606063140a84db60e01b838360405160240161230792919061547f565b60606331d7a50560e01b83836040516024016123079291906155ac565b6000613429836139cd868563ffffffff613e9516565b9063ffffffff613ec616565b600c546000906139f090600163ffffffff61239416565b90506139fa61513d565b5060008281526015602090815260408083208484528252918290208251606081018452815480825260018301549382019390935260029091015492810192909252156112fb576112fb610a188484613ef0565b6000828152600b6020526040902054613a6c908263ffffffff61239416565b6000838152600b6020526040902055601754613a8e908263ffffffff61239416565b6017555050565b610f738160006001613d8f565b6000613429836139cd613abc82600163ffffffff61239416565b613acc888763ffffffff613e9516565b9063ffffffff612aad16565b600d5415611d8557611d85610a186000613f0d565b60115415801590613b05575060125463ffffffff1615155b8015613b12575060135415155b8015613b25575060145463ffffffff1615155b8015613b405750601454640100000000900463ffffffff1615155b15611d8557611d85610a186001613f0d565b606063c996af7b60e01b83836040516024016123079291906155dc565b6000821580613b7c575081155b15613b8957506000613429565b6000613b9c85600163ffffffff61239416565b865167ffffffffffffffff161015613bb8578560400151613bbe565b85602001515b6bffffffffffffffffffffffff16905080613bdd576000915050613429565b613be88484836139b7565b9695505050505050565b6000831580613c0057508183145b15613c0d57506000613429565b818310613c46576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119019061564d565b613c4e615199565b613c588685613f4c565b9050613c62615199565b613c6c8785613f4c565b9050611f7d81600001518260200151846000015185602001518a61406a565b600080613c9888886140f6565b90506000613ca687876140f6565b9050811580613cb3575080155b15613cc4575060009150611f7d9050565b600081831315613cdd57613cd88284614148565b613ce7565b613ce78383614148565b9050613d10613d0b613cf883614167565b8863ffffffff168863ffffffff16614809565b614818565b905081831315613d2957613d248282614148565b613d33565b613d338282614e02565b9050613d3f818c614e2e565b9b9a5050505050505050505050565b6000828152600b6020526040902054613d6d908263ffffffff612aad16565b6000838152600b6020526040902055601754613a8e908263ffffffff612aad16565b6000838152600f6020526040902054600c5480821415613db05750506112fb565b613db8615199565b506000858152600e602090815260408083208584528252918290208251808401909352805483526001015490820152613def615199565b613df882614e70565b15613e3157613e11826000015183602001518888614e79565b60208301819052818352613e259190614edb565b60208301528152613e3c565b602081018590528581525b6000878152600e6020908152604080832086845282528083208451815593820151600190940193909355978152600f9097529095205550505050565b6060639ae94f0160e01b838360405160240161230792919061559c565b600082613ea457506000610fcf565b82820282848281613eb157fe5b0414610fcc57610fcc610a1860018686613648565b600081613edc57613edc610a1860038585613648565b6000828481613ee757fe5b04949350505050565b6060635caa0b0560e01b83836040516024016123079291906155ac565b60607f0b02d77300000000000000000000000000000000000000000000000000000000826001811115613f3c57fe5b604051602401612ae4919061580e565b613f54615199565b506000828152600e602090815260408083208484528252918290208251808401909352805483526001015490820152613f8c81614e70565b15613f9657610fcf565b6000613fa983600163ffffffff61239416565b6000858152600e60209081526040808320848452825291829020825180840190935280548352600101549082015292509050613fe482614e70565b15613fef5750610fcf565b6000848152600f60205260409020548381101561404c576000858152600e602090815260408083208484528252918290208251808401909352805483526001015490820152925061403f83614e70565b1561404c5750610fcf9050565b50506040805180820190915260008152600160208201529392505050565b600081614079575060006140ed565b8361409957614092856139cd848963ffffffff613e9516565b90506140ed565b60006140be6140ae868863ffffffff613e9516565b6124db898763ffffffff613e9516565b905060006140d2828663ffffffff613ec616565b90506140e8876139cd868463ffffffff613e9516565b925050505b95945050505050565b60008083121561410e5761410e610a18600185614f04565b600082121561412557614125610a18600184614f04565b610fcc614142846f80000000000000000000000000000000614f45565b83614f8d565b6000610fcc614142846f80000000000000000000000000000000614f45565b60006f8000000000000000000000000000000082131561418f5761418f610a1860018461500e565b600082136141a5576141a5610a1860008461500e565b6f800000000000000000000000000000008214156141c557506000610c85565b640733048c5a82136141f857507fffffffffffffffffffffffffffffffe010000000000000000000000000000000610c85565b60008060006a01c8464f761647600000008513614257577ffffffffffffffffffffffffffffffff000000000000000000000000000000000909301926a01c8464f761647600000006f8000000000000000000000000000000086020594505b6cf1aaddd7742e9000000000000085136142b5577ffffffffffffffffffffffffffffffff800000000000000000000000000000000909301926cf1aaddd7742e900000000000006f8000000000000000000000000000000086020594505b6e0afe10820813d780000000000000008513614317577ffffffffffffffffffffffffffffffffc00000000000000000000000000000000909301926e0afe10820813d780000000000000006f8000000000000000000000000000000086020594505b6f02582ab704279ec00000000000000000851361437b577ffffffffffffffffffffffffffffffffe00000000000000000000000000000000909301926f02582ab704279ec000000000000000006f8000000000000000000000000000000086020594505b6f1152aaa3bf81cc00000000000000000085136143df577fffffffffffffffffffffffffffffffff00000000000000000000000000000000909301926f1152aaa3bf81cc0000000000000000006f8000000000000000000000000000000086020594505b6f2f16ac6c59de700000000000000000008513614443577fffffffffffffffffffffffffffffffff80000000000000000000000000000000909301926f2f16ac6c59de700000000000000000006f8000000000000000000000000000000086020594505b6f4da2cbf1be582800000000000000000085136144a7577fffffffffffffffffffffffffffffffffc0000000000000000000000000000000909301926f4da2cbf1be58280000000000000000006f8000000000000000000000000000000086020594505b6f63afbe7ab2082c000000000000000000851361450b577fffffffffffffffffffffffffffffffffe0000000000000000000000000000000909301926f63afbe7ab2082c0000000000000000006f8000000000000000000000000000000086020594505b6f70f5a893b608861e1f58934f97aea57d851361456f577ffffffffffffffffffffffffffffffffff0000000000000000000000000000000909301926f70f5a893b608861e1f58934f97aea57d6f8000000000000000000000000000000086020594505b7fffffffffffffffffffffffffffffffff80000000000000000000000000000000850192508291506f80000000000000000000000000000000828002059050700100000000000000000000000000000000838103830205840193506f80000000000000000000000000000000818302816145e557fe5b059150700200000000000000000000000000000000836faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0383028161461657fe5b05840193506f800000000000000000000000000000008183028161463657fe5b059150700300000000000000000000000000000000836f999999999999999999999999999999990383028161466757fe5b05840193506f800000000000000000000000000000008183028161468757fe5b059150700400000000000000000000000000000000836f92492492492492492492492492492492038302816146b857fe5b05840193506f80000000000000000000000000000000818302816146d857fe5b059150700500000000000000000000000000000000836f8e38e38e38e38e38e38e38e38e38e38e0383028161470957fe5b05840193506f800000000000000000000000000000008183028161472957fe5b059150700600000000000000000000000000000000836f8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8b0383028161475a57fe5b05840193506f800000000000000000000000000000008183028161477a57fe5b059150700700000000000000000000000000000000836f89d89d89d89d89d89d89d89d89d89d89038302816147ab57fe5b05840193506f80000000000000000000000000000000818302816147cb57fe5b059150700800000000000000000000000000000000836f88888888888888888888888888888888038302816147fc57fe5b0584019350505050919050565b60006134296141428585614f45565b60007fffffffffffffffffffffffffffffffe01000000000000000000000000000000082121561484a57506000610c85565b8161486657506f80000000000000000000000000000000610c85565b600082131561487d5761487d610a1860018461500e565b6f800000000000000000000000000000006f1000000000000000000000000000000083078080028290056710e1b3be415a0000810293909301929091818302059050806705a0913f6b1e000002830192506f80000000000000000000000000000000828202816148e957fe5b05905080670168244fdac7800002830192506f800000000000000000000000000000008282028161491657fe5b05905080664807432bc1800002830192506f800000000000000000000000000000008282028161494257fe5b05905080660c0135dca0400002830192506f800000000000000000000000000000008282028161496e57fe5b059050806601b707b1cdc00002830192506f800000000000000000000000000000008282028161499a57fe5b059050806536e0f639b80002830192506f80000000000000000000000000000000828202816149c557fe5b05905080650618fee9f80002830192506f80000000000000000000000000000000828202816149f057fe5b05905080649c197dcc0002830192506f8000000000000000000000000000000082820281614a1a57fe5b05905080640e30dce40002830192506f8000000000000000000000000000000082820281614a4457fe5b0590508064012ebd130002830192506f8000000000000000000000000000000082820281614a6e57fe5b059050806317499f0002830192506f8000000000000000000000000000000082820281614a9757fe5b059050806301a9d48002830192506f8000000000000000000000000000000082820281614ac057fe5b05905080621c638002830192506f8000000000000000000000000000000082820281614ae857fe5b059050806201c63802830192506f8000000000000000000000000000000082820281614b1057fe5b05905080611ab802830192506f8000000000000000000000000000000082820281614b3757fe5b0590508061017c02830192506f8000000000000000000000000000000082820281614b5e57fe5b05905080601402830192506f8000000000000000000000000000000082820281614b8457fe5b600095909503946721c3677c82b400009190059384010582016f8000000000000000000000000000000001929050701000000000000000000000000000000000841615614bf3577243cbaf42a000812488fc5c220ad7b97bf6e99e6cf1aaddd7742e56d32fb9f9974484020592505b700800000000000000000000000000000000841615614c35577105d27a9f51c31b7c2f8038212a05747799916e0afe10820813d65dfe6a33c07f738f84020592505b700400000000000000000000000000000000841615614c7757701b4c902e273a58678d6d3bfdb93db96d026f02582ab704279e8efd15e0265855c47a84020592505b700200000000000000000000000000000000841615614cb9577003b1cc971a9bb5b9867477440d6d1577506f1152aaa3bf81cb9fdb76eae12d02957184020592505b700100000000000000000000000000000000841615614cfb5770015bf0a8b1457695355fb8ac404e7a79e36f2f16ac6c59de6f8d5d6f63c1482a7c8684020592505b6f80000000000000000000000000000000841615614d3b576fd3094c70f034de4b96ff7d5b6f99fcd86f4da2cbf1be5827f9eb3ad1aa9866ebb384020592505b6f40000000000000000000000000000000841615614d7b576fa45af1e1f40c333b3de1db4dd55f29a76f63afbe7ab2082ba1a0ae5e4eb1b479dc84020592505b6f20000000000000000000000000000000841615614dbb576f910b022db7ae67ce76b441c27035c6a16f70f5a893b608861e1f58934f97aea57d84020592505b6f10000000000000000000000000000000841615614dfb576f88415abbe9a76bead8d00cf112e4d4a86f783eafef1c0a8f3978c7f81824d62ebf84020592505b5050919050565b60006f80000000000000000000000000000000614e1f8484614f45565b81614e2657fe5b059392505050565b600080821215614e4657614e46610a18600184614f04565b6000614e528484614f45565b905060008113614e66576000915050610fcf565b607f1c9392505050565b60200151151590565b60008085614e8b575082905081614ed2565b83614e9a575084905083614ed2565b614ebd614ead858763ffffffff613e9516565b613acc888663ffffffff613e9516565b9150614ecf858463ffffffff613e9516565b90505b94509492505050565b600080614ef984846f8000000000000000000000000000000061503d565b915091509250929050565b60607fbd79545f00000000000000000000000000000000000000000000000000000000836001811115614f3357fe5b8360405160240161230792919061581c565b600082614f5457506000610fcf565b5081810281838281614f6257fe5b05141580614f79575082828281614f7557fe5b0514155b15610fcf57610fcf610a18600185856150ab565b600081614fa357614fa3610a18600285856150ab565b7f800000000000000000000000000000000000000000000000000000000000000083148015614ff15750817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff145b1561500557615005610a18600385856150ab565b818381614e2657fe5b60607fed2f26a100000000000000000000000000000000000000000000000000000000836001811115614f3357fe5b6000808285118061504d57508284115b156150a2576000848610156150625784615064565b855b9050615076818563ffffffff613ec616565b9050615088868263ffffffff613ec616565b925061509a858263ffffffff613ec616565b91505061327a565b50929391925050565b60607f8c12dfe7000000000000000000000000000000000000000000000000000000008460038111156150da57fe5b84846040516024016136679392919061582f565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b60405180606001604052806000815260200160008152602001600081525090565b604080518082019091526000808252602082015290565b8154818355818111156112fb576000838152602090206112fb9181019083016151b3565b604051806040016040528060008152602001600081525090565b610bed91905b808211156151cd57600081556001016151b9565b5090565b6000604082840312156125ca578081fd5b6000602082840312156151f3578081fd5b8135610fcc81615854565b60006020828403121561520f578081fd5b8151610fcc81615854565b60008060006060848603121561522e578182fd5b833561523981615854565b9250602084013561524981615854565b929592945050506040919091013590565b6000806040838503121561526c578182fd5b823561527781615854565b946020939093013593505050565b60008060408385031215615297578182fd5b82356152a281615854565b915060208301356152b281615884565b809150509250929050565b6000602082840312156152ce578081fd5b8151610fcc81615876565b6000602082840312156152ea578081fd5b5035919050565b60008060408385031215615303578182fd5b8235915060208301356152b281615854565b60008060408385031215615327578182fd5b50508035926020909101359150565b60008060408385031215615348578182fd5b82359150602083013563ffffffff811681146152b2578182fd5b600060208284031215615373578081fd5b8135610fcc81615884565b600080600060a08486031215615392578283fd5b61539c85856151d1565b92506153ab85604086016151d1565b9150608084013590509250925092565b6000602082840312156153cc578081fd5b5051919050565b600080600080600060a086880312156153ea578283fd5b8535945060208601356153fc81615891565b935060408601359250606086013561541381615891565b9150608086013561542381615891565b809150509295509295909350565b60008060408385031215615443578182fd5b823561544e81615891565b915060208301356152b281615876565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b602080825282518282018190526000918401906040840190835b8181101561554b57835173ffffffffffffffffffffffffffffffffffffffff16835260209384019390920191600101615517565b509095945050505050565b901515815260200190565b90815260200190565b92835273ffffffffffffffffffffffffffffffffffffffff91909116602083015263ffffffff16604082015260600190565b9182521515602082015260400190565b918252602082015260400190565b60608101600485106155c857fe5b938152602081019290925260409091015290565b60408101600384106155ea57fe5b9281526020015290565b604081016156018461584a565b92815273ffffffffffffffffffffffffffffffffffffffff9190911660209091015290565b606081016156338561584a565b938152602081019290925263ffffffff1660409091015290565b60208082526013908201527f43525f494e54455256414c5f494e56414c494400000000000000000000000000604082015260600190565b60208082526014908201527f574554485f5452414e534645525f4641494c4544000000000000000000000000604082015260600190565b81518152602080830151908201526040918201519181019190915260600190565b815173ffffffffffffffffffffffffffffffffffffffff16815260209182015163ffffffff169181019190915260400190565b815167ffffffffffffffff1681526020808301516bffffffffffffffffffffffff90811691830191909152604092830151169181019190915260600190565b9283526020830191909152604082015260600190565b93845260208401929092526040830152606082015260800190565b948552602085019390935260408401919091526060830152608082015260a00190565b94855263ffffffff938416602086015260408501929092528216606084015216608082015260a00190565b92835260ff918216602084015216604082015260600190565b63ffffffff91909116815260200190565b63ffffffff92831681529116602082015260400190565b60ff91909116815260200190565b60ff929092168252602082015260400190565b60ff9390931683526020830191909152604082015260600190565b60028110610f7357fe5b73ffffffffffffffffffffffffffffffffffffffff81168114610f7357600080fd5b8015158114610f7357600080fd5b60028110610f7357600080fd5b63ffffffff81168114610f7357600080fdfea365627a7a72315820cd4dcb64a07325df26d38404ffcca0f57d30f570cbe815c03c543316add5e5a46c6578706572696d656e74616cf564736f6c634300050c0040" + "object": "0x6080604052600436106103295760003560e01c80638da5cb5b116101a5578063bb7ef7e0116100ec578063e8eeb3f811610095578063f18765321161006f578063f1876532146108bf578063f252b7a1146108df578063f2fde38b146108ff578063ff691b111461091f57610329565b8063e8eeb3f814610875578063e907f0031461088a578063ee99205c146108aa57610329565b8063e0ee036e116100c6578063e0ee036e1461082b578063e1c7392a14610840578063e804d0a41461085557610329565b8063bb7ef7e0146107c9578063c18c9141146107e9578063d39de6e91461080957610329565b8063a694fc3a1161014e578063b3e3337911610128578063b3e3337914610769578063b510879f14610789578063b9181611146107a957610329565b8063a694fc3a1461071f578063b05315241461073f578063b2baa33e1461075457610329565b8063a26171e21161017f578063a26171e2146106e2578063a3b4a327146106f7578063a657e5791461070a57610329565b80638da5cb5b1461068d5780639ad26744146106a25780639c3ccc82146106c257610329565b80634bcc3f6711610274578063624a72321161021d57806370712939116101f757806370712939146106165780637667180814610636578063816667961461064b5780638a2e271a1461066d57610329565b8063624a7232146105cc57806363403801146105e157806368a7d6cd146105f657610329565b80635bd4ab731161024e5780635bd4ab73146105595780635d91121d146105865780635e615a6b146105a657610329565b80634bcc3f67146104f7578063587da0231461052457806358f6c7e31461053957610329565b80633c277fc5116102d657806344a6958b116102b057806344a6958b1461048a57806346b97959146104aa578063494503d4146104d757610329565b80633c277fc51461041b5780633e4ad7321461043d57806342f1181e1461046a57610329565b80632a94c279116103075780632a94c2791461039b5780632e17de78146103ca57806338229d93146103ea57610329565b806301e28d841461032e5780630b9663db146103505780631e7ff8f61461037b575b600080fd5b34801561033a57600080fd5b5061034e610349366004614fc7565b61093f565b005b34801561035c57600080fd5b50610365610a0d565b6040516103729190615327565b60405180910390f35b34801561038757600080fd5b50610365610396366004614fc7565b610b5a565b3480156103a757600080fd5b506103bb6103b63660046150db565b610bf4565b60405161037293929190615514565b3480156103d657600080fd5b5061034e6103e536600461509f565b610c20565b3480156103f657600080fd5b5061040a61040536600461509f565b610dd5565b604051610372959493929190615545565b34801561042757600080fd5b50610430610e04565b6040516103729190615224565b34801561044957600080fd5b5061045d61045836600461509f565b610e1c565b60405161037291906154d5565b34801561047657600080fd5b5061034e610485366004614fc7565b610e3b565b34801561049657600080fd5b5061045d6104a536600461504c565b610e4f565b3480156104b657600080fd5b506104ca6104c536600461509f565b610eae565b6040516103729190615481565b3480156104e357600080fd5b506104306104f236600461509f565b610ef9565b34801561050357600080fd5b5061051761051236600461509f565b610f2d565b60405161037291906154a2565b34801561053057600080fd5b50610365610f8f565b34801561054557600080fd5b5061034e610554366004615144565b610f95565b34801561056557600080fd5b50610579610574366004614fc7565b611192565b604051610372919061531c565b34801561059257600080fd5b5061034e6105a13660046150fc565b6111a7565b3480156105b257600080fd5b506105bb611270565b604051610372959493929190615568565b3480156105d857600080fd5b50610430611299565b3480156105ed57600080fd5b506103656112b1565b34801561060257600080fd5b506103656106113660046151f7565b6112b7565b34801561062257600080fd5b5061034e610631366004614fc7565b6113f0565b34801561064257600080fd5b506103656114a5565b34801561065757600080fd5b506106606114ab565b60405161037291906155ac565b34801561067957600080fd5b5061034e610688366004614fc7565b6114b7565b34801561069957600080fd5b50610430611579565b3480156106ae57600080fd5b5061034e6106bd366004615022565b611595565b3480156106ce57600080fd5b5061034e6106dd366004615199565b6115a7565b3480156106ee57600080fd5b50610365611621565b61034e610705366004614fe2565b611627565b34801561071657600080fd5b50610365611877565b34801561072b57600080fd5b5061034e61073a36600461509f565b61187d565b34801561074b57600080fd5b50610365611992565b34801561076057600080fd5b50610365611998565b34801561077557600080fd5b5061034e61078436600461509f565b6119b6565b34801561079557600080fd5b5061034e6107a436600461509f565b6119f6565b3480156107b557600080fd5b506105796107c4366004614fc7565b611a00565b3480156107d557600080fd5b506103656107e436600461509f565b611a15565b3480156107f557600080fd5b5061036561080436600461509f565b611aa0565b34801561081557600080fd5b5061081e611ab2565b60405161037291906152c3565b34801561083757600080fd5b50610660611b21565b34801561084c57600080fd5b5061034e611b2d565b34801561086157600080fd5b5061045d610870366004615128565b611b47565b34801561088157600080fd5b50610660611c97565b34801561089657600080fd5b506103656108a53660046150b7565b611cab565b3480156108b657600080fd5b50610430611d48565b3480156108cb57600080fd5b506103656108da366004614fc7565b611d64565b3480156108eb57600080fd5b5061045d6108fa366004615022565b611d76565b34801561090b57600080fd5b5061034e61091a366004614fc7565b611db7565b34801561092b57600080fd5b5061034e61093a36600461509f565b611e5a565b610947612087565b73ffffffffffffffffffffffffffffffffffffffff811660009081526010602052604090205460ff16610987576109876109826001836120aa565b61214c565b73ffffffffffffffffffffffffffffffffffffffff81166000908152601060205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517ff50d0d312d501878616eb5e78ebf3ed6dcd3955aaef8165af9c6b057cc4832fb90610a02908390615224565b60405180910390a150565b600c5460009081610a2582600163ffffffff61215416565b6000818152601660205260409020600101549091508015610a4d57610a4d6109828383612173565b610a55612190565b610a5d612203565b600084815260166020526040902055610a74614eaf565b50600083815260166020908152604091829020825160a08101845281548082526001830154938201849052600283015482860181905260038401546060840181905260049094015460808401529451919488947fbb4a26fa0ace13ee4da343896c20eaa44a618fb9071fdd8c2e2c960a4583189d94610af6949193929161552a565b60405180910390a2610b066122a7565b6020810151610b4d57805160405185917fb463d19ecf455be65365092cf8e1db6934a0334cf8cd532ddf9964d01f36b5b291610b4491600091615372565b60405180910390a25b6020015193505050505b90565b6000610b64611299565b73ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401610b9c9190615224565b60206040518083038186803b158015610bb457600080fd5b505afa158015610bc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610bec9190810190615181565b90505b919050565b601560209081526000928352604080842090915290825290208054600182015460029092015490919083565b33610c29614ede565b73ffffffffffffffffffffffffffffffffffffffff821660009081527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc60205260409020610c76906122ea565b90506000610ca882602001516bffffffffffffffffffffffff1683604001516bffffffffffffffffffffffff16612390565b905080841115610cbf57610cbf61098285836123a6565b73ffffffffffffffffffffffffffffffffffffffff831660009081527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc60205260409020610d0d90856123c3565b610d15611299565b73ffffffffffffffffffffffffffffffffffffffff16639470b0bd84866040518363ffffffff1660e01b8152600401610d4f92919061529d565b600060405180830381600087803b158015610d6957600080fd5b505af1158015610d7d573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff167f85082129d87b2fe11527cb1b3b7a520aeb5aa6913f88a3d8757fe40d1db02fdd85604051610dc79190615327565b60405180910390a250505050565b601660205260009081526040902080546001820154600283015460038401546004909401549293919290919085565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc290565b610e24614ede565b6000828152600760205260409020610bec906122ea565b610e4361244a565b610e4c81612491565b50565b610e57614ede565b610ea560056000846001811115610e6a57fe5b60ff1681526020808201929092526040908101600090812073ffffffffffffffffffffffffffffffffffffffff8816825290925290206122ea565b90505b92915050565b610eb6614efe565b506000908152601560209081526040808320600c548452825291829020825160608101845281548152600182015492810192909252600201549181019190915290565b60028181548110610f0657fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b610f35614f1f565b506000908152600a602090815260409182902082518084019093525473ffffffffffffffffffffffffffffffffffffffff8116835274010000000000000000000000000000000000000000900463ffffffff169082015290565b600d5481565b3381610fa1575061118d565b6000610fb06020860186615128565b6001811115610fbb57fe5b148015610fdf57506000610fd26020850185615128565b6001811115610fdd57fe5b145b15610fea575061118d565b6001610ff96020860186615128565b600181111561100457fe5b141561101957611019846020013582846125c2565b60016110286020850185615128565b600181111561103357fe5b1415611048576110488360200135828461265b565b600060058161105a6020880188615128565b600181111561106557fe5b60ff1681526020808201929092526040908101600090812073ffffffffffffffffffffffffffffffffffffffff86168252835290812092509060059082906110af90880188615128565b60018111156110ba57fe5b60ff1681526020808201929092526040908101600090812073ffffffffffffffffffffffffffffffffffffffff87168252909252902090506110fd8282866126f4565b60208086013590870180359073ffffffffffffffffffffffffffffffffffffffff8616907f7d3ad1dcf03b9027064d1d9a474a69e0cecc31324c541d3eb9b5e6fa2f106c8d90889061114f908c615128565b600181111561115a57fe5b61116760208c018c615128565b600181111561117257fe5b60405161118193929190615593565b60405180910390a45050505b505050565b60106020526000908152604090205460ff1681565b816111b1816127ed565b6000838152600a602052604090205474010000000000000000000000000000000000000000900463ffffffff166111e9848285612826565b6000848152600a60205260409081902080547fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000063ffffffff8716021790555184907f8ea2a7a959bd25f226b7b0a4393613f7fdcaa8404e8bad96aa52dc1c1459016790610dc790849087906155bd565b601154601254601354601454929363ffffffff9283169391928281169264010000000090041690565b73ba7f8b5fb1b19c1211c5d49550fcd149177a5eaf90565b60115481565b60085460009033906112d090600163ffffffff61286e16565b600881905591506112e582620f424086612826565b6112ed614f1f565b5060408051808201825273ffffffffffffffffffffffffffffffffffffffff838116825263ffffffff87811660208085019182526000888152600a9091528590208451815492517fffffffffffffffffffffffff00000000000000000000000000000000000000009093169416939093177fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000919092160217905590517fcec6fc86ea644053f6edff1160dfe3fa5c61e7a5ef9f873f145bb03a0bd319e7906113d190859085908990615330565b60405180910390a183156113e8576113e8836119b6565b505092915050565b6113f861244a565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff16611431576114316109828261288a565b60005b6002548110156114a1578173ffffffffffffffffffffffffffffffffffffffff166002828154811061146257fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff161415611499576114948282612929565b6114a1565b600101611434565b5050565b600c5481565b60145463ffffffff1681565b6114bf612087565b73ffffffffffffffffffffffffffffffffffffffff811660009081526010602052604090205460ff16156114fb576114fb6109826000836120aa565b73ffffffffffffffffffffffffffffffffffffffff81166000908152601060205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517f3e535d1ab441ef41c268fd9b52b478aee02d693c5ca2a84b5d26b89e0922e5e190610a02908390615224565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b61159d61244a565b6114a18282612929565b6115af612087565b6115bc8585858585612b78565b3073ffffffffffffffffffffffffffffffffffffffff1663c6f3a4276040518163ffffffff1660e01b815260040160006040518083038186803b15801561160257600080fd5b505afa158015611616573d6000803e3d6000fd5b505050505050505050565b60135481565b3360009081526010602052604090205460ff1661164a5761164a61098233612c3b565b61165381612c56565b3461172d57611660610e04565b73ffffffffffffffffffffffffffffffffffffffff166323b872dd8330846040518463ffffffff1660e01b815260040161169c9392919061526c565b602060405180830381600087803b1580156116b657600080fd5b505af11580156116ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116ee9190810190615083565b61172d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117249061544a565b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600960205260409020548061175e575061118d565b600061176982610e1c565b602001516bffffffffffffffffffffffff16905060135481101561178e57505061118d565b600c5460008381526015602090815260408083208484528252808320601690925290912081548061183d576000806117c68888612c77565b6002870182905560018701819055600386015491935091506117ee908263ffffffff61286e16565b60038501556001808501546118089163ffffffff61286e16565b6001850155604051889087907f14b098103235344975b17508c2391721cc9ac3f3fa2b56c7ff46f8480dfd074f90600090a350505b61184d818863ffffffff61286e16565b83556002820154611864908863ffffffff61286e16565b8260020181905550505050505050505050565b60085481565b33611886611299565b73ffffffffffffffffffffffffffffffffffffffff166315cc36f282846040518363ffffffff1660e01b81526004016118c092919061529d565b600060405180830381600087803b1580156118da57600080fd5b505af11580156118ee573d6000803e3d6000fd5b5050505073ffffffffffffffffffffffffffffffffffffffff811660009081527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc602052604090206119409083612d03565b8073ffffffffffffffffffffffffffffffffffffffff167febedb8b3c678666e7f36970bc8f57abf6d8fa2e828c0da91ea5b75bf68ed101a836040516119869190615327565b60405180910390a25050565b60175481565b60006119b1601154600d5461286e90919063ffffffff16565b905090565b3360008181526009602052604080822084905551839183917f5640833634fce74eb9211d1209a91dd5a1c8c6a751696bff9323b4db67f815139190a35050565b610e4c8133612d6d565b60016020526000908152604090205460ff1681565b6000611a1f614f1f565b506000828152600a6020908152604080832081518083019092525473ffffffffffffffffffffffffffffffffffffffff8116825274010000000000000000000000000000000000000000900463ffffffff16918101919091529080611a8385612f45565b91509150611a9683602001518383613002565b5095945050505050565b600b6020526000908152604090205481565b60606002805480602002602001604051908101604052809291908181526020018280548015611b1757602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611aec575b5050505050905090565b60125463ffffffff1681565b611b35612087565b611b3d613043565b611b45613056565b565b611b4f614ede565b60016000526004602052611b827fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe056122ea565b90506000826001811115611b9257fe5b1415610bef576000611ba2611299565b73ffffffffffffffffffffffffffffffffffffffff16639706e0c06040518163ffffffff1660e01b815260040160206040518083038186803b158015611be757600080fd5b505afa158015611bfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611c1f9190810190615181565b9050611c4e611c4983602001516bffffffffffffffffffffffff168361215490919063ffffffff16565b613081565b6bffffffffffffffffffffffff90811660208401526040830151611c7e91611c499184911663ffffffff61215416565b6bffffffffffffffffffffffff16604083015250919050565b601454640100000000900463ffffffff1681565b6000611cb5614f1f565b506000838152600a6020908152604080832081518083019092525473ffffffffffffffffffffffffffffffffffffffff8116825274010000000000000000000000000000000000000000900463ffffffff16918101919091529080611d1986612f45565b915091506000611d2e84602001518484613002565b915050611d3d878783856130a5565b979650505050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b60096020526000908152604090205481565b611d7e614ede565b73ffffffffffffffffffffffffffffffffffffffff831660009081526006602090815260408083208584529091529020610ea5906122ea565b611dbf61244a565b73ffffffffffffffffffffffffffffffffffffffff8116611dea57611de56109826131f2565b610e4c565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b600c546000611e7082600163ffffffff61215416565b9050611e7a614eaf565b50600081815260166020908152604091829020825160a08101845281548152600182015492810183905260028201549381019390935260038101546060840152600401546080830152611ecf57505050610e4c565b611ed7614efe565b5060008481526015602090815260408083208584528252918290208251606081018452815480825260018301549382019390935260029091015492810192909252611f255750505050610e4c565b6000858152601560209081526040808320868452909152812081815560018101829055600201819055611f588284613229565b9050600080611f6c8884866040015161329e565b9150915087877ff1116b309178aa62dcb6bf8c3b8bc2321724907c7ebf52192d14c8ce3aa9194c8484604051611fa3929190615372565b60405180910390a36000611fbd838363ffffffff61286e16565b6080870151909150611fd5908263ffffffff61286e16565b6080870181905260008881526016602090815260409091206004019190915586015161200890600163ffffffff61215416565b602080880182815260008a8152601690925260409091206001019190915551611616576080860151865188917fb463d19ecf455be65365092cf8e1db6934a0334cf8cd532ddf9964d01f36b5b291612066908263ffffffff61215416565b604051612074929190615372565b60405180910390a2505050505050505050565b3360009081526001602052604090205460ff16611b4557611b45610982336133ee565b606063b9588e4360e01b83836040516024016120c79291906153ba565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905092915050565b805160208201fd5b60008282111561216d5761216d61098260028585613409565b50900390565b606063614b800a60e01b83836040516024016120c7929190615372565b30318015610e4c576121a0610e04565b73ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156121e757600080fd5b505af11580156121fb573d6000803e3d6000fd5b505050505050565b60006119b1601754612213610e04565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161224b9190615224565b60206040518083038186803b15801561226357600080fd5b505afa158015612277573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061229b9190810190615181565b9063ffffffff61215416565b4260006122b2611998565b9050818111156122c9576122c961098282846134ae565b600c546000906122e090600163ffffffff61286e16565b600c555050600d55565b6122f2614ede565b5060408051606081018252825467ffffffffffffffff81168083526bffffffffffffffffffffffff680100000000000000008304811660208501527401000000000000000000000000000000000000000090920490911692820192909252600c54909181111561238a57612365816134cb565b67ffffffffffffffff16825260408201516bffffffffffffffffffffffff1660208301525b50919050565b600081831061239f5781610ea5565b5090919050565b60606384c8b7c960e01b83836040516024016120c7929190615372565b6123cb614ede565b6123d4836122ea565b90506123fe611c498383604001516bffffffffffffffffffffffff1661215490919063ffffffff16565b6bffffffffffffffffffffffff9081166040830152602082015161242d91611c4991168463ffffffff61215416565b6bffffffffffffffffffffffff16602082015261118d83826134eb565b60005473ffffffffffffffffffffffffffffffffffffffff163314611b4557600054611b459061098290339073ffffffffffffffffffffffffffffffffffffffff166135a5565b73ffffffffffffffffffffffffffffffffffffffff81166124b7576124b76109826135c2565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff16156124f1576124f1610982826135f9565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b6125cb83613614565b6125d58383612d6d565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600660209081526040808320868452909152902061260f908261364b565b6000838152600760205260409020612627908261364b565b6001600052600460205261118d7fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe058261364b565b61266483613614565b61266e8383612d6d565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260066020908152604080832086845290915290206126a890826136a3565b60008381526007602052604090206126c090826136a3565b6001600052600460205261118d7fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe05826136a3565b6126fe83836136de565b156127085761118d565b612710614ede565b612719846122ea565b9050612723614ede565b61272c846122ea565b905081604001516bffffffffffffffffffffffff16831115612767576127676109828484604001516bffffffffffffffffffffffff166123a6565b604082015161278e90611c49906bffffffffffffffffffffffff168563ffffffff61215416565b6bffffffffffffffffffffffff9081166040808501919091528201516127bf91611c4991168563ffffffff61286e16565b6bffffffffffffffffffffffff1660408201526127dc85836134eb565b6127e684826134eb565b5050505050565b6000818152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff163381146114a1576114a161098233846136e5565b620f424063ffffffff8216111561284b5761284661098260008584613702565b61118d565b8163ffffffff168163ffffffff16111561118d5761118d61098260018584613702565b600082820183811015610ea557610ea561098260008686613409565b606063eb5108a260e01b826040516024016128a59190615224565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050919050565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff16612962576129626109828361288a565b600254811061297d5761297d61098282600280549050613721565b8173ffffffffffffffffffffffffffffffffffffffff16600282815481106129a157fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614612a0357612a03610982600283815481106129db57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff168461373e565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110612a7e57fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff9092169183908110612ab157fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190612b309082614f36565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b60118590556012805463ffffffff8087167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000092831617909255601385905560148054848416640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff9487169190931617929092161790556040517f613157dbb0e920deab8ad6ddd3805e87cbf57344b9fe780f1764790ec789754290612c2c9087908790879087908790615568565b60405180910390a15050505050565b606063b56d2df060e01b826040516024016128a59190615224565b803414158015612c6557503415155b15610e4c57610e4c610982823461375b565b6000828152600a602052604081205481908190612caa9073ffffffffffffffffffffffffffffffffffffffff1686611d76565b602001516bffffffffffffffffffffffff169050612cce848263ffffffff61215416565b601254909350612cf990612cec9063ffffffff16620f424086613778565b829063ffffffff61286e16565b9150509250929050565b612d0b614ede565b612d14836122ea565b9050612d3e611c498383604001516bffffffffffffffffffffffff1661286e90919063ffffffff16565b6bffffffffffffffffffffffff9081166040830152602082015161242d91611c4991168463ffffffff61286e16565b612d768261379a565b6000612d8583836000806130a5565b73ffffffffffffffffffffffffffffffffffffffff831660009081526006602090815260408083208784529091529020909150612dc1906122ea565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600660209081526040808320888452825291829020845181549286015195909301517fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090921667ffffffffffffffff909316929092177fffffffffffffffffffffffff000000000000000000000000ffffffffffffffff16680100000000000000006bffffffffffffffffffffffff95861602179092167401000000000000000000000000000000000000000093909216929092021790558015612f3c57612ea6838261380e565b612eae610e04565b73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401612ee892919061529d565b602060405180830381600087803b158015612f0257600080fd5b505af1158015612f16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612f3a9190810190615083565b505b61118d83613856565b6000806000612f606001600c5461215490919063ffffffff16565b9050612f6a614efe565b50600084815260156020908152604080832084845282528083208151606080820184528254825260018084015483870152600293840154838601528787526016865295849020845160a0810186528154815296810154958701959095529184015492850192909252600383015490840152600490910154608083015290612ff2908290613229565b9350806040015192505050915091565b600080826130125783915061303b565b61302663ffffffff8616620f424086613863565b9150613038848363ffffffff61215416565b90505b935093915050565b61304b613899565b42600d556001600c55565b61305e6138ae565b620d2f00620dbba068056bc75e2d63100000600260036127e68585858585612b78565b806bffffffffffffffffffffffff81168114610bef57610bef610982600284613913565b600c546000906130b3614ede565b5073ffffffffffffffffffffffffffffffffffffffff851660009081526006602090815260408083208984528252918290208251606081018452905467ffffffffffffffff81168083526bffffffffffffffffffffffff6801000000000000000083048116948401949094527401000000000000000000000000000000000000000090910490921692810192909252821415613154576000925050506131ea565b61316081838787613930565b81519093506000906131839067ffffffffffffffff16600163ffffffff61286e16565b90506131c16131b48984602001516bffffffffffffffffffffffff16856000015167ffffffffffffffff16856139b3565b859063ffffffff61286e16565b93506131e46131b48984604001516bffffffffffffffffffffffff1684876139b3565b93505050505b949350505050565b60408051808201909152600481527fe69edc3e00000000000000000000000000000000000000000000000000000000602082015290565b815160009061323757610ea8565b8151835160408401516020860151606086015160145461326d95949392919063ffffffff80821691640100000000900416613a4c565b608083015183519192506000916132899163ffffffff61215416565b905081811015613297578091505b5092915050565b6000806132a9614f1f565b506000858152600a602090815260409182902082518084019093525473ffffffffffffffffffffffffffffffffffffffff8116835274010000000000000000000000000000000000000000900463ffffffff1690820181905261330d908686613002565b909350915082156133ca57613320610e04565b81516040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff929092169163a9059cbb9161337691879060040161529d565b602060405180830381600087803b15801561339057600080fd5b505af11580156133a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506133c89190810190615083565b505b81156133e5576133da8683613b0f565b6133e5868386613b50565b50935093915050565b606063b65a25b960e01b826040516024016128a59190615224565b606063e946c1bb60e01b84848460405160240161342893929190615380565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290509392505050565b606063a6bcde4760e01b83836040516024016120c7929190615372565b8067ffffffffffffffff81168114610bef57610bef610982600184613913565b8051825460408301516020909301516bffffffffffffffffffffffff90811668010000000000000000027fffffffffffffffffffffffff000000000000000000000000ffffffffffffffff91909416740100000000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff67ffffffffffffffff9094167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090931692909217929092161716179055565b6060631de45ad160e01b83836040516024016120c7929190615245565b60408051808201909152600481527f57654fe400000000000000000000000000000000000000000000000000000000602082015290565b606063de16f1a060e01b826040516024016128a59190615224565b6000818152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff16610e4c57610e4c610982826000613c39565b613653614ede565b61365c836122ea565b9050613686611c498383604001516bffffffffffffffffffffffff1661215490919063ffffffff16565b6bffffffffffffffffffffffff16604082015261118d83826134eb565b6136ab614ede565b6136b4836122ea565b9050613686611c498383604001516bffffffffffffffffffffffff1661286e90919063ffffffff16565b1460011690565b60606382ded78560e01b83836040516024016120c792919061529d565b60606322df959760e01b848484604051602401613428939291906153ec565b606063e9f8377160e01b83836040516024016120c7929190615372565b606063140a84db60e01b83836040516024016120c7929190615245565b60606331d7a50560e01b83836040516024016120c7929190615372565b60006131ea8361378e868563ffffffff613c5616565b9063ffffffff613c8716565b600c546000906137b190600163ffffffff61215416565b90506137bb614efe565b50600082815260156020908152604080832084845282529182902082516060810184528154808252600183015493820193909352600290910154928101929092521561118d5761118d6109828484613cb1565b6000828152600b602052604090205461382d908263ffffffff61215416565b6000838152600b602052604090205560175461384f908263ffffffff61215416565b6017555050565b610e4c8160006001613b50565b60006131ea8361378e61387d82600163ffffffff61215416565b61388d888763ffffffff613c5616565b9063ffffffff61286e16565b600d5415611b4557611b456109826000613cce565b601154158015906138c6575060125463ffffffff1615155b80156138d3575060135415155b80156138e6575060145463ffffffff1615155b80156139015750601454640100000000900463ffffffff1615155b15611b4557611b456109826001613cce565b606063c996af7b60e01b83836040516024016120c79291906153a2565b600082158061393d575081155b1561394a575060006131ea565b600061395d85600163ffffffff61215416565b865167ffffffffffffffff16101561397957856040015161397f565b85602001515b6bffffffffffffffffffffffff1690508061399e5760009150506131ea565b6139a9848483613778565b9695505050505050565b60008315806139c157508183145b156139ce575060006131ea565b818310613a07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172490615413565b613a0f614f5a565b613a198685613d0d565b9050613a23614f5a565b613a2d8785613d0d565b9050611d3d81600001518260200151846000015185602001518a613e2b565b600080613a598888613eb7565b90506000613a678787613eb7565b9050811580613a74575080155b15613a85575060009150611d3d9050565b600081831315613a9e57613a998284613f09565b613aa8565b613aa88383613f09565b9050613ad1613acc613ab983613f28565b8863ffffffff168863ffffffff166145ca565b6145d9565b905081831315613aea57613ae58282613f09565b613af4565b613af48282614bc3565b9050613b00818c614bef565b9b9a5050505050505050505050565b6000828152600b6020526040902054613b2e908263ffffffff61286e16565b6000838152600b602052604090205560175461384f908263ffffffff61286e16565b6000838152600f6020526040902054600c5480821415613b7157505061118d565b613b79614f5a565b506000858152600e602090815260408083208584528252918290208251808401909352805483526001015490820152613bb0614f5a565b613bb982614c31565b15613bf257613bd2826000015183602001518888614c3a565b60208301819052818352613be69190614c9c565b60208301528152613bfd565b602081018590528581525b6000878152600e6020908152604080832086845282528083208451815593820151600190940193909355978152600f9097529095205550505050565b6060639ae94f0160e01b83836040516024016120c7929190615362565b600082613c6557506000610ea8565b82820282848281613c7257fe5b0414610ea557610ea561098260018686613409565b600081613c9d57613c9d61098260038585613409565b6000828481613ca857fe5b04949350505050565b6060635caa0b0560e01b83836040516024016120c7929190615372565b60607f0b02d77300000000000000000000000000000000000000000000000000000000826001811115613cfd57fe5b6040516024016128a591906155d4565b613d15614f5a565b506000828152600e602090815260408083208484528252918290208251808401909352805483526001015490820152613d4d81614c31565b15613d5757610ea8565b6000613d6a83600163ffffffff61215416565b6000858152600e60209081526040808320848452825291829020825180840190935280548352600101549082015292509050613da582614c31565b15613db05750610ea8565b6000848152600f602052604090205483811015613e0d576000858152600e6020908152604080832084845282529182902082518084019093528054835260010154908201529250613e0083614c31565b15613e0d5750610ea89050565b50506040805180820190915260008152600160208201529392505050565b600081613e3a57506000613eae565b83613e5a57613e538561378e848963ffffffff613c5616565b9050613eae565b6000613e7f613e6f868863ffffffff613c5616565b61229b898763ffffffff613c5616565b90506000613e93828663ffffffff613c8716565b9050613ea98761378e868463ffffffff613c5616565b925050505b95945050505050565b600080831215613ecf57613ecf610982600185614cc5565b6000821215613ee657613ee6610982600184614cc5565b610ea5613f03846f80000000000000000000000000000000614d06565b83614d4e565b6000610ea5613f03846f80000000000000000000000000000000614d06565b60006f80000000000000000000000000000000821315613f5057613f50610982600184614dcf565b60008213613f6657613f66610982600084614dcf565b6f80000000000000000000000000000000821415613f8657506000610bef565b640733048c5a8213613fb957507fffffffffffffffffffffffffffffffe010000000000000000000000000000000610bef565b60008060006a01c8464f761647600000008513614018577ffffffffffffffffffffffffffffffff000000000000000000000000000000000909301926a01c8464f761647600000006f8000000000000000000000000000000086020594505b6cf1aaddd7742e900000000000008513614076577ffffffffffffffffffffffffffffffff800000000000000000000000000000000909301926cf1aaddd7742e900000000000006f8000000000000000000000000000000086020594505b6e0afe10820813d7800000000000000085136140d8577ffffffffffffffffffffffffffffffffc00000000000000000000000000000000909301926e0afe10820813d780000000000000006f8000000000000000000000000000000086020594505b6f02582ab704279ec00000000000000000851361413c577ffffffffffffffffffffffffffffffffe00000000000000000000000000000000909301926f02582ab704279ec000000000000000006f8000000000000000000000000000000086020594505b6f1152aaa3bf81cc00000000000000000085136141a0577fffffffffffffffffffffffffffffffff00000000000000000000000000000000909301926f1152aaa3bf81cc0000000000000000006f8000000000000000000000000000000086020594505b6f2f16ac6c59de700000000000000000008513614204577fffffffffffffffffffffffffffffffff80000000000000000000000000000000909301926f2f16ac6c59de700000000000000000006f8000000000000000000000000000000086020594505b6f4da2cbf1be58280000000000000000008513614268577fffffffffffffffffffffffffffffffffc0000000000000000000000000000000909301926f4da2cbf1be58280000000000000000006f8000000000000000000000000000000086020594505b6f63afbe7ab2082c00000000000000000085136142cc577fffffffffffffffffffffffffffffffffe0000000000000000000000000000000909301926f63afbe7ab2082c0000000000000000006f8000000000000000000000000000000086020594505b6f70f5a893b608861e1f58934f97aea57d8513614330577ffffffffffffffffffffffffffffffffff0000000000000000000000000000000909301926f70f5a893b608861e1f58934f97aea57d6f8000000000000000000000000000000086020594505b7fffffffffffffffffffffffffffffffff80000000000000000000000000000000850192508291506f80000000000000000000000000000000828002059050700100000000000000000000000000000000838103830205840193506f80000000000000000000000000000000818302816143a657fe5b059150700200000000000000000000000000000000836faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa038302816143d757fe5b05840193506f80000000000000000000000000000000818302816143f757fe5b059150700300000000000000000000000000000000836f999999999999999999999999999999990383028161442857fe5b05840193506f800000000000000000000000000000008183028161444857fe5b059150700400000000000000000000000000000000836f924924924924924924924924924924920383028161447957fe5b05840193506f800000000000000000000000000000008183028161449957fe5b059150700500000000000000000000000000000000836f8e38e38e38e38e38e38e38e38e38e38e038302816144ca57fe5b05840193506f80000000000000000000000000000000818302816144ea57fe5b059150700600000000000000000000000000000000836f8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8b0383028161451b57fe5b05840193506f800000000000000000000000000000008183028161453b57fe5b059150700700000000000000000000000000000000836f89d89d89d89d89d89d89d89d89d89d890383028161456c57fe5b05840193506f800000000000000000000000000000008183028161458c57fe5b059150700800000000000000000000000000000000836f88888888888888888888888888888888038302816145bd57fe5b0584019350505050919050565b60006131ea613f038585614d06565b60007fffffffffffffffffffffffffffffffe01000000000000000000000000000000082121561460b57506000610bef565b8161462757506f80000000000000000000000000000000610bef565b600082131561463e5761463e610982600184614dcf565b6f800000000000000000000000000000006f1000000000000000000000000000000083078080028290056710e1b3be415a0000810293909301929091818302059050806705a0913f6b1e000002830192506f80000000000000000000000000000000828202816146aa57fe5b05905080670168244fdac7800002830192506f80000000000000000000000000000000828202816146d757fe5b05905080664807432bc1800002830192506f800000000000000000000000000000008282028161470357fe5b05905080660c0135dca0400002830192506f800000000000000000000000000000008282028161472f57fe5b059050806601b707b1cdc00002830192506f800000000000000000000000000000008282028161475b57fe5b059050806536e0f639b80002830192506f800000000000000000000000000000008282028161478657fe5b05905080650618fee9f80002830192506f80000000000000000000000000000000828202816147b157fe5b05905080649c197dcc0002830192506f80000000000000000000000000000000828202816147db57fe5b05905080640e30dce40002830192506f800000000000000000000000000000008282028161480557fe5b0590508064012ebd130002830192506f800000000000000000000000000000008282028161482f57fe5b059050806317499f0002830192506f800000000000000000000000000000008282028161485857fe5b059050806301a9d48002830192506f800000000000000000000000000000008282028161488157fe5b05905080621c638002830192506f80000000000000000000000000000000828202816148a957fe5b059050806201c63802830192506f80000000000000000000000000000000828202816148d157fe5b05905080611ab802830192506f80000000000000000000000000000000828202816148f857fe5b0590508061017c02830192506f800000000000000000000000000000008282028161491f57fe5b05905080601402830192506f800000000000000000000000000000008282028161494557fe5b600095909503946721c3677c82b400009190059384010582016f80000000000000000000000000000000019290507010000000000000000000000000000000008416156149b4577243cbaf42a000812488fc5c220ad7b97bf6e99e6cf1aaddd7742e56d32fb9f9974484020592505b7008000000000000000000000000000000008416156149f6577105d27a9f51c31b7c2f8038212a05747799916e0afe10820813d65dfe6a33c07f738f84020592505b700400000000000000000000000000000000841615614a3857701b4c902e273a58678d6d3bfdb93db96d026f02582ab704279e8efd15e0265855c47a84020592505b700200000000000000000000000000000000841615614a7a577003b1cc971a9bb5b9867477440d6d1577506f1152aaa3bf81cb9fdb76eae12d02957184020592505b700100000000000000000000000000000000841615614abc5770015bf0a8b1457695355fb8ac404e7a79e36f2f16ac6c59de6f8d5d6f63c1482a7c8684020592505b6f80000000000000000000000000000000841615614afc576fd3094c70f034de4b96ff7d5b6f99fcd86f4da2cbf1be5827f9eb3ad1aa9866ebb384020592505b6f40000000000000000000000000000000841615614b3c576fa45af1e1f40c333b3de1db4dd55f29a76f63afbe7ab2082ba1a0ae5e4eb1b479dc84020592505b6f20000000000000000000000000000000841615614b7c576f910b022db7ae67ce76b441c27035c6a16f70f5a893b608861e1f58934f97aea57d84020592505b6f10000000000000000000000000000000841615614bbc576f88415abbe9a76bead8d00cf112e4d4a86f783eafef1c0a8f3978c7f81824d62ebf84020592505b5050919050565b60006f80000000000000000000000000000000614be08484614d06565b81614be757fe5b059392505050565b600080821215614c0757614c07610982600184614cc5565b6000614c138484614d06565b905060008113614c27576000915050610ea8565b607f1c9392505050565b60200151151590565b60008085614c4c575082905081614c93565b83614c5b575084905083614c93565b614c7e614c6e858763ffffffff613c5616565b61388d888663ffffffff613c5616565b9150614c90858463ffffffff613c5616565b90505b94509492505050565b600080614cba84846f80000000000000000000000000000000614dfe565b915091509250929050565b60607fbd79545f00000000000000000000000000000000000000000000000000000000836001811115614cf457fe5b836040516024016120c79291906155e2565b600082614d1557506000610ea8565b5081810281838281614d2357fe5b05141580614d3a575082828281614d3657fe5b0514155b15610ea857610ea861098260018585614e6c565b600081614d6457614d6461098260028585614e6c565b7f800000000000000000000000000000000000000000000000000000000000000083148015614db25750817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff145b15614dc657614dc661098260038585614e6c565b818381614be757fe5b60607fed2f26a100000000000000000000000000000000000000000000000000000000836001811115614cf457fe5b60008082851180614e0e57508284115b15614e6357600084861015614e235784614e25565b855b9050614e37818563ffffffff613c8716565b9050614e49868263ffffffff613c8716565b9250614e5b858263ffffffff613c8716565b91505061303b565b50929391925050565b60607f8c12dfe700000000000000000000000000000000000000000000000000000000846003811115614e9b57fe5b8484604051602401613428939291906155f5565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b60405180606001604052806000815260200160008152602001600081525090565b604080518082019091526000808252602082015290565b81548183558181111561118d5760008381526020902061118d918101908301614f74565b604051806040016040528060008152602001600081525090565b610b5791905b80821115614f8e5760008155600101614f7a565b5090565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ea857600080fd5b60006040828403121561238a578081fd5b600060208284031215614fd8578081fd5b610ea58383614f92565b600080600060608486031215614ff6578182fd5b83356150018161561a565b925060208401356150118161561a565b929592945050506040919091013590565b60008060408385031215615034578182fd5b61503e8484614f92565b946020939093013593505050565b6000806040838503121561505e578182fd5b6150688484614f92565b915060208301356150788161564a565b809150509250929050565b600060208284031215615094578081fd5b8151610ea58161563c565b6000602082840312156150b0578081fd5b5035919050565b600080604083850312156150c9578182fd5b8235915060208301356150788161561a565b600080604083850312156150ed578182fd5b50508035926020909101359150565b6000806040838503121561510e578182fd5b82359150602083013563ffffffff81168114615078578182fd5b600060208284031215615139578081fd5b8135610ea58161564a565b600080600060a08486031215615158578283fd5b6151628585614fb6565b92506151718560408601614fb6565b9150608084013590509250925092565b600060208284031215615192578081fd5b5051919050565b600080600080600060a086880312156151b0578283fd5b8535945060208601356151c281615657565b93506040860135925060608601356151d981615657565b915060808601356151e981615657565b809150509295509295909350565b60008060408385031215615209578182fd5b823561521481615657565b915060208301356150788161563c565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b602080825282518282018190526000918401906040840190835b8181101561531157835173ffffffffffffffffffffffffffffffffffffffff168352602093840193909201916001016152dd565b509095945050505050565b901515815260200190565b90815260200190565b92835273ffffffffffffffffffffffffffffffffffffffff91909116602083015263ffffffff16604082015260600190565b9182521515602082015260400190565b918252602082015260400190565b606081016004851061538e57fe5b938152602081019290925260409091015290565b60408101600384106153b057fe5b9281526020015290565b604081016153c784615610565b92815273ffffffffffffffffffffffffffffffffffffffff9190911660209091015290565b606081016153f985615610565b938152602081019290925263ffffffff1660409091015290565b60208082526013908201527f43525f494e54455256414c5f494e56414c494400000000000000000000000000604082015260600190565b60208082526014908201527f574554485f5452414e534645525f4641494c4544000000000000000000000000604082015260600190565b81518152602080830151908201526040918201519181019190915260600190565b815173ffffffffffffffffffffffffffffffffffffffff16815260209182015163ffffffff169181019190915260400190565b815167ffffffffffffffff1681526020808301516bffffffffffffffffffffffff90811691830191909152604092830151169181019190915260600190565b9283526020830191909152604082015260600190565b93845260208401929092526040830152606082015260800190565b948552602085019390935260408401919091526060830152608082015260a00190565b94855263ffffffff938416602086015260408501929092528216606084015216608082015260a00190565b92835260ff918216602084015216604082015260600190565b63ffffffff91909116815260200190565b63ffffffff92831681529116602082015260400190565b60ff91909116815260200190565b60ff929092168252602082015260400190565b60ff9390931683526020830191909152604082015260600190565b60028110610e4c57fe5b73ffffffffffffffffffffffffffffffffffffffff81168114610e4c57600080fd5b8015158114610e4c57600080fd5b60028110610e4c57600080fd5b63ffffffff81168114610e4c57600080fdfea365627a7a723158205024e9d661fc969de54dcf3c94b2f323b81b2f191fbdfed639fa0724cfd2f6a96c6578706572696d656e74616cf564736f6c634300050c0040" } } }, @@ -961,7 +956,7 @@ ] } }, - "evmVersion": "constantinople" + "evmVersion": "istanbul" } }, "chains": {} diff --git a/packages/contract-artifacts/artifacts/StakingProxy.json b/packages/contract-artifacts/artifacts/StakingProxy.json index 65c17cd946..ae92ed7e2f 100644 --- a/packages/contract-artifacts/artifacts/StakingProxy.json +++ b/packages/contract-artifacts/artifacts/StakingProxy.json @@ -349,15 +349,19 @@ "index": "Index of target in authorities array.", "target": "Address to remove authorization from." } + }, + "transferOwnership(address)": { + "details": "Change the owner of this contract.", + "params": { "newOwner": "New owner address." } } } }, "evm": { "bytecode": { - "object": "0x60806040523480156200001157600080fd5b5060405162001ee938038062001ee983398101604081905262000034916200071a565b600080546001600160a01b031916339081179091556200005d906001600160e01b036200008e16565b62000071816001600160e01b036200019116565b620000873360006001600160e01b03620002b716565b50620007d0565b6001600160a01b038116620000c757620000c7620000b66200046060201b620012bd1760201c565b6200049860201b62000efc1760201c565b6001600160a01b03811660009081526001602052604090205460ff1615620001035762000103620000b682620004a060201b620012f41760201c565b6001600160a01b0381166000818152600160208190526040808320805460ff19168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180546001600160a01b03191684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b600380546001600160a01b0319166001600160a01b0383161790556040517f048368388f801041f7690185c4e28b6f3505c740c47be8ac104b55df666bfc8490620001de90839062000786565b60405180910390a160035460408051600481526024810182526020810180516001600160e01b03167fe1c7392a0000000000000000000000000000000000000000000000000000000017905290516000926060926001600160a01b03909116916200024a91906200074a565b600060405180830381855af49150503d806000811462000287576040519150601f19603f3d011682016040523d82523d6000602084013e6200028c565b606091505b5091509150816200029f57805160208201fd5b620002b26001600160e01b036200050e16565b505050565b6001600160a01b03821660009081526001602052604090205460ff16620002f257620002f2620000b683620005e960201b62000e5d1760201c565b60025481106200031c576200031c620000b6826002805490506200060660201b6200130f1760201c565b816001600160a01b0316600282815481106200033457fe5b6000918252602090912001546001600160a01b0316146200038d576200038d620000b6600283815481106200036557fe5b600091825260209182902001546001600160a01b03169085906200132c62000677821b17901c565b6001600160a01b0382166000908152600160205260409020805460ff19169055600280546000198101908110620003c057fe5b600091825260209091200154600280546001600160a01b039092169183908110620003e757fe5b600091825260209091200180546001600160a01b0319166001600160a01b0392909216919091179055600280546000190190620004259082620006d8565b5060405133906001600160a01b038416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b60408051808201909152600481527f57654fe40000000000000000000000000000000000000000000000000000000060208201525b90565b805160208201fd5b606063de16f1a060e01b82604051602401620004bd919062000786565b60408051601f198184030181529190526020810180516001600160e01b03167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050919050565b6011546206978081108062000525575062278d0081115b15620005465762000546620000b660046200069660201b6200118a1760201c565b60145463ffffffff6401000000008204811691168110806200056c575063ffffffff8116155b156200058d576200058d620000b660006200069660201b6200118a1760201c565b601254620f424063ffffffff9091161115620005be57620005be620000b660016200069660201b6200118a1760201c565b60026013541015620005e557620005e5620000b660036200069660201b6200118a1760201c565b5050565b606063eb5108a260e01b82604051602401620004bd919062000786565b606063e9f8377160e01b838360405160240162000625929190620007b4565b60408051601f198184030181529190526020810180516001600160e01b03167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905092915050565b606063140a84db60e01b8383604051602401620006259291906200079a565b60607ffc45bd1100000000000000000000000000000000000000000000000000000000826004811115620006c657fe5b604051602401620004bd9190620007c2565b815481835581811115620002b257600083815260209020620002b29181019083016200049591905b8082111562000716576000815560010162000700565b5090565b6000602082840312156200072c578081fd5b81516001600160a01b038116811462000743578182fd5b9392505050565b60008251815b818110156200076c576020818601810151858301520162000750565b818111156200077b5782828501525b509190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b918252602082015260400190565b60ff91909116815260200190565b61170980620007e06000396000f3fe6080604052600436106101ac5760003560e01c80638da5cb5b116100ec578063c6f3a4271161008a578063e8eeb3f811610064578063e8eeb3f814610511578063ee99205c14610526578063f18765321461053b578063f2fde38b1461055b576101ac565b8063c6f3a427146104c5578063d39de6e9146104da578063e0ee036e146104fc576101ac565b8063a657e579116100c6578063a657e5791461045b578063b053152414610470578063b918161114610485578063c18c9141146104a5576101ac565b80638da5cb5b146104115780639ad2674414610426578063a26171e214610446576101ac565b80635bd4ab73116101595780637071293911610133578063707129391461038d57806376671808146103ad57806381666796146103c2578063856a65eb146103e4576101ac565b80635bd4ab731461032b578063634038011461035857806366615d561461036d576101ac565b806342f1181e1161018a57806342f1181e146102bc578063494503d4146102dc578063587da02314610309576101ac565b80632a94c2791461023c57806337b006a61461027457806338229d931461028b575b60035460405160009160609173ffffffffffffffffffffffffffffffffffffffff909116906101de908490369061149b565b600060405180830381855af49150503d8060008114610219576040519150601f19603f3d011682016040523d82523d6000602084013e61021e565b606091505b5091509150816000811461023457815182602001f35b815182602001fd5b34801561024857600080fd5b5061025c61025736600461147a565b61057b565b60405161026b9392919061163e565b60405180910390f35b34801561028057600080fd5b506102896105a7565b005b34801561029757600080fd5b506102ab6102a6366004611462565b610602565b60405161026b959493929190611654565b3480156102c857600080fd5b506102896102d73660046113aa565b610631565b3480156102e857600080fd5b506102fc6102f7366004611462565b610645565b60405161026b91906114c7565b34801561031557600080fd5b5061031e610679565b60405161026b9190611627565b34801561033757600080fd5b5061034b6103463660046113aa565b61067f565b60405161026b919061161c565b34801561036457600080fd5b5061031e610694565b34801561037957600080fd5b506102896103883660046113aa565b61069a565b34801561039957600080fd5b506102896103a83660046113aa565b6106ab565b3480156103b957600080fd5b5061031e610765565b3480156103ce57600080fd5b506103d761076b565b60405161026b9190611677565b3480156103f057600080fd5b506104046103ff3660046113f6565b610777565b60405161026b9190611568565b34801561041d57600080fd5b506102fc610904565b34801561043257600080fd5b506102896104413660046113cc565b610920565b34801561045257600080fd5b5061031e610932565b34801561046757600080fd5b5061031e610938565b34801561047c57600080fd5b5061031e61093e565b34801561049157600080fd5b5061034b6104a03660046113aa565b610944565b3480156104b157600080fd5b5061031e6104c0366004611462565b610959565b3480156104d157600080fd5b5061028961096b565b3480156104e657600080fd5b506104ef610a04565b60405161026b919061150f565b34801561050857600080fd5b506103d7610a74565b34801561051d57600080fd5b506103d7610a80565b34801561053257600080fd5b506102fc610a94565b34801561054757600080fd5b5061031e6105563660046113aa565b610ab0565b34801561056757600080fd5b506102896105763660046113aa565b610ac2565b601560209081526000928352604080842090915290825290208054600182015460029092015490919083565b6105af610b65565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556040517f6caedcb22a5c22c8ebd0caf751fec1228a6e006e6ee37169321e02d31ecc818390600090a1565b601660205260009081526040902080546001820154600283015460038401546004909401549293919290919085565b610639610b8a565b61064281610bd1565b50565b6002818154811061065257fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b600d5481565b60106020526000908152604090205460ff1681565b60115481565b6106a2610b65565b61064281610d02565b6106b3610b8a565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff166106f1576106f16106ec82610e5d565b610efc565b60005b600254811015610761578173ffffffffffffffffffffffffffffffffffffffff166002828154811061072257fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff161415610759576107548282610f04565b610761565b6001016106f4565b5050565b600c5481565b60145463ffffffff1681565b604080518281526020808402820101909152606090600090829084908180156107b457816020015b606081526020019060019003908161079f5790505b5060035490945073ffffffffffffffffffffffffffffffffffffffff16806107e1576107e16106ec611153565b60005b8281146108f8578173ffffffffffffffffffffffffffffffffffffffff1688888381811061080e57fe5b6020028201905080357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe13684900301811261084857600080fd5b9091016020810191503567ffffffffffffffff81111561086757600080fd5b3681900382131561087757600080fd5b60405161088592919061149b565b600060405180830381855af49150503d80600081146108c0576040519150601f19603f3d011682016040523d82523d6000602084013e6108c5565b606091505b509095509350846108d857835184602001fd5b838682815181106108e557fe5b60209081029190910101526001016107e4565b50505050505b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b610928610b8a565b6107618282610f04565b60135481565b60085481565b60175481565b60016020526000908152604090205460ff1681565b600b6020526000908152604090205481565b60115462069780811080610981575062278d0081115b15610993576109936106ec600461118a565b60145463ffffffff6401000000008204811691168110806109b8575063ffffffff8116155b156109ca576109ca6106ec600061118a565b601254620f424063ffffffff90911611156109ec576109ec6106ec600161118a565b60026013541015610761576107616106ec600361118a565b60606002805480602002602001604051908101604052809291908181526020018280548015610a6957602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610a3e575b505050505090505b90565b60125463ffffffff1681565b601454640100000000900463ffffffff1681565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b60096020526000908152604090205481565b610aca610b8a565b73ffffffffffffffffffffffffffffffffffffffff8116610af557610af06106ec6111c9565b610642565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b3360009081526001602052604090205460ff16610b8857610b886106ec33611200565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b8857600054610b88906106ec90339073ffffffffffffffffffffffffffffffffffffffff1661121b565b73ffffffffffffffffffffffffffffffffffffffff8116610bf757610bf76106ec6112bd565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff1615610c3157610c316106ec826112f4565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790556040517f048368388f801041f7690185c4e28b6f3505c740c47be8ac104b55df666bfc8490610d729083906114c7565b60405180910390a160035460408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe1c7392a00000000000000000000000000000000000000000000000000000000179052905160009260609273ffffffffffffffffffffffffffffffffffffffff90911691610dfe91906114ab565b600060405180830381855af49150503d8060008114610e39576040519150601f19603f3d011682016040523d82523d6000602084013e610e3e565b606091505b509150915081610e5057805160208201fd5b610e5861096b565b505050565b606063eb5108a260e01b82604051602401610e7891906114c7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050919050565b805160208201fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff16610f3d57610f3d6106ec83610e5d565b6002548110610f5857610f586106ec8260028054905061130f565b8173ffffffffffffffffffffffffffffffffffffffff1660028281548110610f7c57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614610fde57610fde6106ec60028381548110610fb657fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff168461132c565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061105957fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff909216918390811061108c57fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019061110b9082611349565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b60408051808201909152600481527f6eff828500000000000000000000000000000000000000000000000000000000602082015290565b60607ffc45bd11000000000000000000000000000000000000000000000000000000008260048111156111b957fe5b604051602401610e789190611688565b60408051808201909152600481527fe69edc3e00000000000000000000000000000000000000000000000000000000602082015290565b606063b65a25b960e01b82604051602401610e7891906114c7565b6060631de45ad160e01b83836040516024016112389291906114e8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905092915050565b60408051808201909152600481527f57654fe400000000000000000000000000000000000000000000000000000000602082015290565b606063de16f1a060e01b82604051602401610e7891906114c7565b606063e9f8377160e01b8383604051602401611238929190611630565b606063140a84db60e01b83836040516024016112389291906114e8565b815481835581811115610e5857600083815260209020610e58918101908301610a7191905b80821115611382576000815560010161136e565b5090565b803573ffffffffffffffffffffffffffffffffffffffff811681146108fe57600080fd5b6000602082840312156113bb578081fd5b6113c58383611386565b9392505050565b600080604083850312156113de578081fd5b6113e88484611386565b946020939093013593505050565b60008060208385031215611408578182fd5b823567ffffffffffffffff8082111561141f578384fd5b81850186601f820112611430578485fd5b8035925081831115611440578485fd5b8660208085028301011115611453578485fd5b60200196919550909350505050565b600060208284031215611473578081fd5b5035919050565b6000806040838503121561148c578182fd5b50508035926020909101359150565b6000828483379101908152919050565b600082516114bd818460208701611696565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b602080825282518282018190526000918401906040840190835b8181101561155d57835173ffffffffffffffffffffffffffffffffffffffff16835260209384019390920191600101611529565b509095945050505050565b6000602080830181845280855180835260408601915060408482028701019250838701855b8281101561160f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452815180518087526115d2818989018a8501611696565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169590950186019450928501929085019060010161158d565b5092979650505050505050565b901515815260200190565b90815260200190565b918252602082015260400190565b9283526020830191909152604082015260600190565b948552602085019390935260408401919091526060830152608082015260a00190565b63ffffffff91909116815260200190565b60ff91909116815260200190565b60005b838110156116b1578181015183820152602001611699565b838111156116c0576000848401525b5050505056fea365627a7a72315820234dbfb1979e729e4b90ba58749ef12a931b7df77beb672b5d45d410d232fff36c6578706572696d656e74616cf564736f6c634300050c0040" + "object": "0x60806040523480156200001157600080fd5b5060405162001f0c38038062001f0c83398101604081905262000034916200071a565b600080546001600160a01b031916339081179091556200005d906001600160e01b036200008e16565b62000071816001600160e01b036200019116565b620000873360006001600160e01b03620002b716565b50620007d0565b6001600160a01b038116620000c757620000c7620000b66200046060201b620012e01760201c565b6200049860201b620005db1760201c565b6001600160a01b03811660009081526001602052604090205460ff1615620001035762000103620000b682620004a060201b620013171760201c565b6001600160a01b0381166000818152600160208190526040808320805460ff19168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180546001600160a01b03191684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b600380546001600160a01b0319166001600160a01b0383161790556040517f048368388f801041f7690185c4e28b6f3505c740c47be8ac104b55df666bfc8490620001de90839062000786565b60405180910390a160035460408051600481526024810182526020810180516001600160e01b03167fe1c7392a0000000000000000000000000000000000000000000000000000000017905290516000926060926001600160a01b03909116916200024a91906200074a565b600060405180830381855af49150503d806000811462000287576040519150601f19603f3d011682016040523d82523d6000602084013e6200028c565b606091505b5091509150816200029f57805160208201fd5b620002b26001600160e01b036200050e16565b505050565b6001600160a01b03821660009081526001602052604090205460ff16620002f257620002f2620000b683620005e960201b62000ebf1760201c565b60025481106200031c576200031c620000b6826002805490506200060660201b620013321760201c565b816001600160a01b0316600282815481106200033457fe5b6000918252602090912001546001600160a01b0316146200038d576200038d620000b6600283815481106200036557fe5b600091825260209182902001546001600160a01b03169085906200134f62000677821b17901c565b6001600160a01b0382166000908152600160205260409020805460ff19169055600280546000198101908110620003c057fe5b600091825260209091200154600280546001600160a01b039092169183908110620003e757fe5b600091825260209091200180546001600160a01b0319166001600160a01b0392909216919091179055600280546000190190620004259082620006d8565b5060405133906001600160a01b038416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b60408051808201909152600481527f57654fe40000000000000000000000000000000000000000000000000000000060208201525b90565b805160208201fd5b606063de16f1a060e01b82604051602401620004bd919062000786565b60408051601f198184030181529190526020810180516001600160e01b03167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050919050565b6011546206978081108062000525575062278d0081115b15620005465762000546620000b660046200069660201b620011ad1760201c565b60145463ffffffff6401000000008204811691168110806200056c575063ffffffff8116155b156200058d576200058d620000b660006200069660201b620011ad1760201c565b601254620f424063ffffffff9091161115620005be57620005be620000b660016200069660201b620011ad1760201c565b60026013541015620005e557620005e5620000b660036200069660201b620011ad1760201c565b5050565b606063eb5108a260e01b82604051602401620004bd919062000786565b606063e9f8377160e01b838360405160240162000625929190620007b4565b60408051601f198184030181529190526020810180516001600160e01b03167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905092915050565b606063140a84db60e01b8383604051602401620006259291906200079a565b60607ffc45bd1100000000000000000000000000000000000000000000000000000000826004811115620006c657fe5b604051602401620004bd9190620007c2565b815481835581811115620002b257600083815260209020620002b29181019083016200049591905b8082111562000716576000815560010162000700565b5090565b6000602082840312156200072c578081fd5b81516001600160a01b038116811462000743578182fd5b9392505050565b60008251815b818110156200076c576020818601810151858301520162000750565b818111156200077b5782828501525b509190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b918252602082015260400190565b60ff91909116815260200190565b61172c80620007e06000396000f3fe6080604052600436106101ac5760003560e01c80638da5cb5b116100ec578063c6f3a4271161008a578063e8eeb3f811610064578063e8eeb3f814610539578063ee99205c1461054e578063f187653214610563578063f2fde38b14610583576101ac565b8063c6f3a427146104ed578063d39de6e914610502578063e0ee036e14610524576101ac565b8063a657e579116100c6578063a657e57914610483578063b053152414610498578063b9181611146104ad578063c18c9141146104cd576101ac565b80638da5cb5b146104395780639ad267441461044e578063a26171e21461046e576101ac565b80635bd4ab7311610159578063707129391161013357806370712939146103b557806376671808146103d557806381666796146103ea578063856a65eb1461040c576101ac565b80635bd4ab7314610353578063634038011461038057806366615d5614610395576101ac565b806342f1181e1161018a57806342f1181e146102e4578063494503d414610304578063587da02314610331576101ac565b80632a94c2791461026457806337b006a61461029c57806338229d93146102b3575b60035473ffffffffffffffffffffffffffffffffffffffff16806101da576101da6101d56105a3565b6105db565b600060608273ffffffffffffffffffffffffffffffffffffffff166000366040516102069291906114be565b600060405180830381855af49150503d8060008114610241576040519150601f19603f3d011682016040523d82523d6000602084013e610246565b606091505b5091509150816000811461025c57815182602001f35b815182602001fd5b34801561027057600080fd5b5061028461027f36600461149d565b6105e3565b60405161029393929190611661565b60405180910390f35b3480156102a857600080fd5b506102b161060f565b005b3480156102bf57600080fd5b506102d36102ce366004611485565b61066a565b604051610293959493929190611677565b3480156102f057600080fd5b506102b16102ff3660046113cd565b610699565b34801561031057600080fd5b5061032461031f366004611485565b6106ad565b60405161029391906114ea565b34801561033d57600080fd5b506103466106e1565b604051610293919061164a565b34801561035f57600080fd5b5061037361036e3660046113cd565b6106e7565b604051610293919061163f565b34801561038c57600080fd5b506103466106fc565b3480156103a157600080fd5b506102b16103b03660046113cd565b610702565b3480156103c157600080fd5b506102b16103d03660046113cd565b610713565b3480156103e157600080fd5b506103466107c8565b3480156103f657600080fd5b506103ff6107ce565b604051610293919061169a565b34801561041857600080fd5b5061042c610427366004611419565b6107da565b604051610293919061158b565b34801561044557600080fd5b50610324610967565b34801561045a57600080fd5b506102b16104693660046113ef565b610983565b34801561047a57600080fd5b50610346610995565b34801561048f57600080fd5b5061034661099b565b3480156104a457600080fd5b506103466109a1565b3480156104b957600080fd5b506103736104c83660046113cd565b6109a7565b3480156104d957600080fd5b506103466104e8366004611485565b6109bc565b3480156104f957600080fd5b506102b16109ce565b34801561050e57600080fd5b50610517610a67565b6040516102939190611532565b34801561053057600080fd5b506103ff610ad6565b34801561054557600080fd5b506103ff610ae2565b34801561055a57600080fd5b50610324610af6565b34801561056f57600080fd5b5061034661057e3660046113cd565b610b12565b34801561058f57600080fd5b506102b161059e3660046113cd565b610b24565b60408051808201909152600481527f6eff82850000000000000000000000000000000000000000000000000000000060208201525b90565b805160208201fd5b601560209081526000928352604080842090915290825290208054600182015460029092015490919083565b610617610bc7565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556040517f6caedcb22a5c22c8ebd0caf751fec1228a6e006e6ee37169321e02d31ecc818390600090a1565b601660205260009081526040902080546001820154600283015460038401546004909401549293919290919085565b6106a1610bec565b6106aa81610c33565b50565b600281815481106106ba57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b600d5481565b60106020526000908152604090205460ff1681565b60115481565b61070a610bc7565b6106aa81610d64565b61071b610bec565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff16610754576107546101d582610ebf565b60005b6002548110156107c4578173ffffffffffffffffffffffffffffffffffffffff166002828154811061078557fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614156107bc576107b78282610f5e565b6107c4565b600101610757565b5050565b600c5481565b60145463ffffffff1681565b6040805182815260208084028201019091526060906000908290849081801561081757816020015b60608152602001906001900390816108025790505b5060035490945073ffffffffffffffffffffffffffffffffffffffff1680610844576108446101d56105a3565b60005b82811461095b578173ffffffffffffffffffffffffffffffffffffffff1688888381811061087157fe5b6020028201905080357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1368490030181126108ab57600080fd5b9091016020810191503567ffffffffffffffff8111156108ca57600080fd5b368190038213156108da57600080fd5b6040516108e89291906114be565b600060405180830381855af49150503d8060008114610923576040519150601f19603f3d011682016040523d82523d6000602084013e610928565b606091505b5090955093508461093b57835184602001fd5b8386828151811061094857fe5b6020908102919091010152600101610847565b50505050505b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b61098b610bec565b6107c48282610f5e565b60135481565b60085481565b60175481565b60016020526000908152604090205460ff1681565b600b6020526000908152604090205481565b601154620697808110806109e4575062278d0081115b156109f6576109f66101d560046111ad565b60145463ffffffff640100000000820481169116811080610a1b575063ffffffff8116155b15610a2d57610a2d6101d560006111ad565b601254620f424063ffffffff9091161115610a4f57610a4f6101d560016111ad565b600260135410156107c4576107c46101d560036111ad565b60606002805480602002602001604051908101604052809291908181526020018280548015610acc57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610aa1575b5050505050905090565b60125463ffffffff1681565b601454640100000000900463ffffffff1681565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b60096020526000908152604090205481565b610b2c610bec565b73ffffffffffffffffffffffffffffffffffffffff8116610b5757610b526101d56111ec565b6106aa565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b3360009081526001602052604090205460ff16610bea57610bea6101d533611223565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610bea57600054610bea906101d590339073ffffffffffffffffffffffffffffffffffffffff1661123e565b73ffffffffffffffffffffffffffffffffffffffff8116610c5957610c596101d56112e0565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff1615610c9357610c936101d582611317565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790556040517f048368388f801041f7690185c4e28b6f3505c740c47be8ac104b55df666bfc8490610dd49083906114ea565b60405180910390a160035460408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe1c7392a00000000000000000000000000000000000000000000000000000000179052905160009260609273ffffffffffffffffffffffffffffffffffffffff90911691610e6091906114ce565b600060405180830381855af49150503d8060008114610e9b576040519150601f19603f3d011682016040523d82523d6000602084013e610ea0565b606091505b509150915081610eb257805160208201fd5b610eba6109ce565b505050565b606063eb5108a260e01b82604051602401610eda91906114ea565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050919050565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff16610f9757610f976101d583610ebf565b6002548110610fb257610fb26101d582600280549050611332565b8173ffffffffffffffffffffffffffffffffffffffff1660028281548110610fd657fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614611038576110386101d56002838154811061101057fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff168461134f565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081106110b357fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff90921691839081106110e657fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190611165908261136c565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b60607ffc45bd11000000000000000000000000000000000000000000000000000000008260048111156111dc57fe5b604051602401610eda91906116ab565b60408051808201909152600481527fe69edc3e00000000000000000000000000000000000000000000000000000000602082015290565b606063b65a25b960e01b82604051602401610eda91906114ea565b6060631de45ad160e01b838360405160240161125b92919061150b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905092915050565b60408051808201909152600481527f57654fe400000000000000000000000000000000000000000000000000000000602082015290565b606063de16f1a060e01b82604051602401610eda91906114ea565b606063e9f8377160e01b838360405160240161125b929190611653565b606063140a84db60e01b838360405160240161125b92919061150b565b815481835581811115610eba57600083815260209020610eba9181019083016105d891905b808211156113a55760008155600101611391565b5090565b803573ffffffffffffffffffffffffffffffffffffffff8116811461096157600080fd5b6000602082840312156113de578081fd5b6113e883836113a9565b9392505050565b60008060408385031215611401578081fd5b61140b84846113a9565b946020939093013593505050565b6000806020838503121561142b578182fd5b823567ffffffffffffffff80821115611442578384fd5b81850186601f820112611453578485fd5b8035925081831115611463578485fd5b8660208085028301011115611476578485fd5b60200196919550909350505050565b600060208284031215611496578081fd5b5035919050565b600080604083850312156114af578182fd5b50508035926020909101359150565b6000828483379101908152919050565b600082516114e08184602087016116b9565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b602080825282518282018190526000918401906040840190835b8181101561158057835173ffffffffffffffffffffffffffffffffffffffff1683526020938401939092019160010161154c565b509095945050505050565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015611632577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452815180518087526115f5818989018a85016116b9565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016959095018601945092850192908501906001016115b0565b5092979650505050505050565b901515815260200190565b90815260200190565b918252602082015260400190565b9283526020830191909152604082015260600190565b948552602085019390935260408401919091526060830152608082015260a00190565b63ffffffff91909116815260200190565b60ff91909116815260200190565b60005b838110156116d45781810151838201526020016116bc565b838111156116e3576000848401525b5050505056fea365627a7a7231582003a7ab09dc5f117d2ce80223a6c3d71e653458084b714201cda124931a1b9bb66c6578706572696d656e74616cf564736f6c634300050c0040" }, "deployedBytecode": { - "object": "0x6080604052600436106101ac5760003560e01c80638da5cb5b116100ec578063c6f3a4271161008a578063e8eeb3f811610064578063e8eeb3f814610511578063ee99205c14610526578063f18765321461053b578063f2fde38b1461055b576101ac565b8063c6f3a427146104c5578063d39de6e9146104da578063e0ee036e146104fc576101ac565b8063a657e579116100c6578063a657e5791461045b578063b053152414610470578063b918161114610485578063c18c9141146104a5576101ac565b80638da5cb5b146104115780639ad2674414610426578063a26171e214610446576101ac565b80635bd4ab73116101595780637071293911610133578063707129391461038d57806376671808146103ad57806381666796146103c2578063856a65eb146103e4576101ac565b80635bd4ab731461032b578063634038011461035857806366615d561461036d576101ac565b806342f1181e1161018a57806342f1181e146102bc578063494503d4146102dc578063587da02314610309576101ac565b80632a94c2791461023c57806337b006a61461027457806338229d931461028b575b60035460405160009160609173ffffffffffffffffffffffffffffffffffffffff909116906101de908490369061149b565b600060405180830381855af49150503d8060008114610219576040519150601f19603f3d011682016040523d82523d6000602084013e61021e565b606091505b5091509150816000811461023457815182602001f35b815182602001fd5b34801561024857600080fd5b5061025c61025736600461147a565b61057b565b60405161026b9392919061163e565b60405180910390f35b34801561028057600080fd5b506102896105a7565b005b34801561029757600080fd5b506102ab6102a6366004611462565b610602565b60405161026b959493929190611654565b3480156102c857600080fd5b506102896102d73660046113aa565b610631565b3480156102e857600080fd5b506102fc6102f7366004611462565b610645565b60405161026b91906114c7565b34801561031557600080fd5b5061031e610679565b60405161026b9190611627565b34801561033757600080fd5b5061034b6103463660046113aa565b61067f565b60405161026b919061161c565b34801561036457600080fd5b5061031e610694565b34801561037957600080fd5b506102896103883660046113aa565b61069a565b34801561039957600080fd5b506102896103a83660046113aa565b6106ab565b3480156103b957600080fd5b5061031e610765565b3480156103ce57600080fd5b506103d761076b565b60405161026b9190611677565b3480156103f057600080fd5b506104046103ff3660046113f6565b610777565b60405161026b9190611568565b34801561041d57600080fd5b506102fc610904565b34801561043257600080fd5b506102896104413660046113cc565b610920565b34801561045257600080fd5b5061031e610932565b34801561046757600080fd5b5061031e610938565b34801561047c57600080fd5b5061031e61093e565b34801561049157600080fd5b5061034b6104a03660046113aa565b610944565b3480156104b157600080fd5b5061031e6104c0366004611462565b610959565b3480156104d157600080fd5b5061028961096b565b3480156104e657600080fd5b506104ef610a04565b60405161026b919061150f565b34801561050857600080fd5b506103d7610a74565b34801561051d57600080fd5b506103d7610a80565b34801561053257600080fd5b506102fc610a94565b34801561054757600080fd5b5061031e6105563660046113aa565b610ab0565b34801561056757600080fd5b506102896105763660046113aa565b610ac2565b601560209081526000928352604080842090915290825290208054600182015460029092015490919083565b6105af610b65565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556040517f6caedcb22a5c22c8ebd0caf751fec1228a6e006e6ee37169321e02d31ecc818390600090a1565b601660205260009081526040902080546001820154600283015460038401546004909401549293919290919085565b610639610b8a565b61064281610bd1565b50565b6002818154811061065257fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b600d5481565b60106020526000908152604090205460ff1681565b60115481565b6106a2610b65565b61064281610d02565b6106b3610b8a565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff166106f1576106f16106ec82610e5d565b610efc565b60005b600254811015610761578173ffffffffffffffffffffffffffffffffffffffff166002828154811061072257fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff161415610759576107548282610f04565b610761565b6001016106f4565b5050565b600c5481565b60145463ffffffff1681565b604080518281526020808402820101909152606090600090829084908180156107b457816020015b606081526020019060019003908161079f5790505b5060035490945073ffffffffffffffffffffffffffffffffffffffff16806107e1576107e16106ec611153565b60005b8281146108f8578173ffffffffffffffffffffffffffffffffffffffff1688888381811061080e57fe5b6020028201905080357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe13684900301811261084857600080fd5b9091016020810191503567ffffffffffffffff81111561086757600080fd5b3681900382131561087757600080fd5b60405161088592919061149b565b600060405180830381855af49150503d80600081146108c0576040519150601f19603f3d011682016040523d82523d6000602084013e6108c5565b606091505b509095509350846108d857835184602001fd5b838682815181106108e557fe5b60209081029190910101526001016107e4565b50505050505b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b610928610b8a565b6107618282610f04565b60135481565b60085481565b60175481565b60016020526000908152604090205460ff1681565b600b6020526000908152604090205481565b60115462069780811080610981575062278d0081115b15610993576109936106ec600461118a565b60145463ffffffff6401000000008204811691168110806109b8575063ffffffff8116155b156109ca576109ca6106ec600061118a565b601254620f424063ffffffff90911611156109ec576109ec6106ec600161118a565b60026013541015610761576107616106ec600361118a565b60606002805480602002602001604051908101604052809291908181526020018280548015610a6957602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610a3e575b505050505090505b90565b60125463ffffffff1681565b601454640100000000900463ffffffff1681565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b60096020526000908152604090205481565b610aca610b8a565b73ffffffffffffffffffffffffffffffffffffffff8116610af557610af06106ec6111c9565b610642565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b3360009081526001602052604090205460ff16610b8857610b886106ec33611200565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b8857600054610b88906106ec90339073ffffffffffffffffffffffffffffffffffffffff1661121b565b73ffffffffffffffffffffffffffffffffffffffff8116610bf757610bf76106ec6112bd565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff1615610c3157610c316106ec826112f4565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790556040517f048368388f801041f7690185c4e28b6f3505c740c47be8ac104b55df666bfc8490610d729083906114c7565b60405180910390a160035460408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe1c7392a00000000000000000000000000000000000000000000000000000000179052905160009260609273ffffffffffffffffffffffffffffffffffffffff90911691610dfe91906114ab565b600060405180830381855af49150503d8060008114610e39576040519150601f19603f3d011682016040523d82523d6000602084013e610e3e565b606091505b509150915081610e5057805160208201fd5b610e5861096b565b505050565b606063eb5108a260e01b82604051602401610e7891906114c7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050919050565b805160208201fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff16610f3d57610f3d6106ec83610e5d565b6002548110610f5857610f586106ec8260028054905061130f565b8173ffffffffffffffffffffffffffffffffffffffff1660028281548110610f7c57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614610fde57610fde6106ec60028381548110610fb657fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff168461132c565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061105957fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff909216918390811061108c57fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019061110b9082611349565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b60408051808201909152600481527f6eff828500000000000000000000000000000000000000000000000000000000602082015290565b60607ffc45bd11000000000000000000000000000000000000000000000000000000008260048111156111b957fe5b604051602401610e789190611688565b60408051808201909152600481527fe69edc3e00000000000000000000000000000000000000000000000000000000602082015290565b606063b65a25b960e01b82604051602401610e7891906114c7565b6060631de45ad160e01b83836040516024016112389291906114e8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905092915050565b60408051808201909152600481527f57654fe400000000000000000000000000000000000000000000000000000000602082015290565b606063de16f1a060e01b82604051602401610e7891906114c7565b606063e9f8377160e01b8383604051602401611238929190611630565b606063140a84db60e01b83836040516024016112389291906114e8565b815481835581811115610e5857600083815260209020610e58918101908301610a7191905b80821115611382576000815560010161136e565b5090565b803573ffffffffffffffffffffffffffffffffffffffff811681146108fe57600080fd5b6000602082840312156113bb578081fd5b6113c58383611386565b9392505050565b600080604083850312156113de578081fd5b6113e88484611386565b946020939093013593505050565b60008060208385031215611408578182fd5b823567ffffffffffffffff8082111561141f578384fd5b81850186601f820112611430578485fd5b8035925081831115611440578485fd5b8660208085028301011115611453578485fd5b60200196919550909350505050565b600060208284031215611473578081fd5b5035919050565b6000806040838503121561148c578182fd5b50508035926020909101359150565b6000828483379101908152919050565b600082516114bd818460208701611696565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b602080825282518282018190526000918401906040840190835b8181101561155d57835173ffffffffffffffffffffffffffffffffffffffff16835260209384019390920191600101611529565b509095945050505050565b6000602080830181845280855180835260408601915060408482028701019250838701855b8281101561160f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452815180518087526115d2818989018a8501611696565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169590950186019450928501929085019060010161158d565b5092979650505050505050565b901515815260200190565b90815260200190565b918252602082015260400190565b9283526020830191909152604082015260600190565b948552602085019390935260408401919091526060830152608082015260a00190565b63ffffffff91909116815260200190565b60ff91909116815260200190565b60005b838110156116b1578181015183820152602001611699565b838111156116c0576000848401525b5050505056fea365627a7a72315820234dbfb1979e729e4b90ba58749ef12a931b7df77beb672b5d45d410d232fff36c6578706572696d656e74616cf564736f6c634300050c0040" + "object": "0x6080604052600436106101ac5760003560e01c80638da5cb5b116100ec578063c6f3a4271161008a578063e8eeb3f811610064578063e8eeb3f814610539578063ee99205c1461054e578063f187653214610563578063f2fde38b14610583576101ac565b8063c6f3a427146104ed578063d39de6e914610502578063e0ee036e14610524576101ac565b8063a657e579116100c6578063a657e57914610483578063b053152414610498578063b9181611146104ad578063c18c9141146104cd576101ac565b80638da5cb5b146104395780639ad267441461044e578063a26171e21461046e576101ac565b80635bd4ab7311610159578063707129391161013357806370712939146103b557806376671808146103d557806381666796146103ea578063856a65eb1461040c576101ac565b80635bd4ab7314610353578063634038011461038057806366615d5614610395576101ac565b806342f1181e1161018a57806342f1181e146102e4578063494503d414610304578063587da02314610331576101ac565b80632a94c2791461026457806337b006a61461029c57806338229d93146102b3575b60035473ffffffffffffffffffffffffffffffffffffffff16806101da576101da6101d56105a3565b6105db565b600060608273ffffffffffffffffffffffffffffffffffffffff166000366040516102069291906114be565b600060405180830381855af49150503d8060008114610241576040519150601f19603f3d011682016040523d82523d6000602084013e610246565b606091505b5091509150816000811461025c57815182602001f35b815182602001fd5b34801561027057600080fd5b5061028461027f36600461149d565b6105e3565b60405161029393929190611661565b60405180910390f35b3480156102a857600080fd5b506102b161060f565b005b3480156102bf57600080fd5b506102d36102ce366004611485565b61066a565b604051610293959493929190611677565b3480156102f057600080fd5b506102b16102ff3660046113cd565b610699565b34801561031057600080fd5b5061032461031f366004611485565b6106ad565b60405161029391906114ea565b34801561033d57600080fd5b506103466106e1565b604051610293919061164a565b34801561035f57600080fd5b5061037361036e3660046113cd565b6106e7565b604051610293919061163f565b34801561038c57600080fd5b506103466106fc565b3480156103a157600080fd5b506102b16103b03660046113cd565b610702565b3480156103c157600080fd5b506102b16103d03660046113cd565b610713565b3480156103e157600080fd5b506103466107c8565b3480156103f657600080fd5b506103ff6107ce565b604051610293919061169a565b34801561041857600080fd5b5061042c610427366004611419565b6107da565b604051610293919061158b565b34801561044557600080fd5b50610324610967565b34801561045a57600080fd5b506102b16104693660046113ef565b610983565b34801561047a57600080fd5b50610346610995565b34801561048f57600080fd5b5061034661099b565b3480156104a457600080fd5b506103466109a1565b3480156104b957600080fd5b506103736104c83660046113cd565b6109a7565b3480156104d957600080fd5b506103466104e8366004611485565b6109bc565b3480156104f957600080fd5b506102b16109ce565b34801561050e57600080fd5b50610517610a67565b6040516102939190611532565b34801561053057600080fd5b506103ff610ad6565b34801561054557600080fd5b506103ff610ae2565b34801561055a57600080fd5b50610324610af6565b34801561056f57600080fd5b5061034661057e3660046113cd565b610b12565b34801561058f57600080fd5b506102b161059e3660046113cd565b610b24565b60408051808201909152600481527f6eff82850000000000000000000000000000000000000000000000000000000060208201525b90565b805160208201fd5b601560209081526000928352604080842090915290825290208054600182015460029092015490919083565b610617610bc7565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556040517f6caedcb22a5c22c8ebd0caf751fec1228a6e006e6ee37169321e02d31ecc818390600090a1565b601660205260009081526040902080546001820154600283015460038401546004909401549293919290919085565b6106a1610bec565b6106aa81610c33565b50565b600281815481106106ba57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b600d5481565b60106020526000908152604090205460ff1681565b60115481565b61070a610bc7565b6106aa81610d64565b61071b610bec565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff16610754576107546101d582610ebf565b60005b6002548110156107c4578173ffffffffffffffffffffffffffffffffffffffff166002828154811061078557fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614156107bc576107b78282610f5e565b6107c4565b600101610757565b5050565b600c5481565b60145463ffffffff1681565b6040805182815260208084028201019091526060906000908290849081801561081757816020015b60608152602001906001900390816108025790505b5060035490945073ffffffffffffffffffffffffffffffffffffffff1680610844576108446101d56105a3565b60005b82811461095b578173ffffffffffffffffffffffffffffffffffffffff1688888381811061087157fe5b6020028201905080357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1368490030181126108ab57600080fd5b9091016020810191503567ffffffffffffffff8111156108ca57600080fd5b368190038213156108da57600080fd5b6040516108e89291906114be565b600060405180830381855af49150503d8060008114610923576040519150601f19603f3d011682016040523d82523d6000602084013e610928565b606091505b5090955093508461093b57835184602001fd5b8386828151811061094857fe5b6020908102919091010152600101610847565b50505050505b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b61098b610bec565b6107c48282610f5e565b60135481565b60085481565b60175481565b60016020526000908152604090205460ff1681565b600b6020526000908152604090205481565b601154620697808110806109e4575062278d0081115b156109f6576109f66101d560046111ad565b60145463ffffffff640100000000820481169116811080610a1b575063ffffffff8116155b15610a2d57610a2d6101d560006111ad565b601254620f424063ffffffff9091161115610a4f57610a4f6101d560016111ad565b600260135410156107c4576107c46101d560036111ad565b60606002805480602002602001604051908101604052809291908181526020018280548015610acc57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610aa1575b5050505050905090565b60125463ffffffff1681565b601454640100000000900463ffffffff1681565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b60096020526000908152604090205481565b610b2c610bec565b73ffffffffffffffffffffffffffffffffffffffff8116610b5757610b526101d56111ec565b6106aa565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b3360009081526001602052604090205460ff16610bea57610bea6101d533611223565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610bea57600054610bea906101d590339073ffffffffffffffffffffffffffffffffffffffff1661123e565b73ffffffffffffffffffffffffffffffffffffffff8116610c5957610c596101d56112e0565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff1615610c9357610c936101d582611317565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790556040517f048368388f801041f7690185c4e28b6f3505c740c47be8ac104b55df666bfc8490610dd49083906114ea565b60405180910390a160035460408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe1c7392a00000000000000000000000000000000000000000000000000000000179052905160009260609273ffffffffffffffffffffffffffffffffffffffff90911691610e6091906114ce565b600060405180830381855af49150503d8060008114610e9b576040519150601f19603f3d011682016040523d82523d6000602084013e610ea0565b606091505b509150915081610eb257805160208201fd5b610eba6109ce565b505050565b606063eb5108a260e01b82604051602401610eda91906114ea565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050919050565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff16610f9757610f976101d583610ebf565b6002548110610fb257610fb26101d582600280549050611332565b8173ffffffffffffffffffffffffffffffffffffffff1660028281548110610fd657fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614611038576110386101d56002838154811061101057fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff168461134f565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081106110b357fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff90921691839081106110e657fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190611165908261136c565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b60607ffc45bd11000000000000000000000000000000000000000000000000000000008260048111156111dc57fe5b604051602401610eda91906116ab565b60408051808201909152600481527fe69edc3e00000000000000000000000000000000000000000000000000000000602082015290565b606063b65a25b960e01b82604051602401610eda91906114ea565b6060631de45ad160e01b838360405160240161125b92919061150b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905092915050565b60408051808201909152600481527f57654fe400000000000000000000000000000000000000000000000000000000602082015290565b606063de16f1a060e01b82604051602401610eda91906114ea565b606063e9f8377160e01b838360405160240161125b929190611653565b606063140a84db60e01b838360405160240161125b92919061150b565b815481835581811115610eba57600083815260209020610eba9181019083016105d891905b808211156113a55760008155600101611391565b5090565b803573ffffffffffffffffffffffffffffffffffffffff8116811461096157600080fd5b6000602082840312156113de578081fd5b6113e883836113a9565b9392505050565b60008060408385031215611401578081fd5b61140b84846113a9565b946020939093013593505050565b6000806020838503121561142b578182fd5b823567ffffffffffffffff80821115611442578384fd5b81850186601f820112611453578485fd5b8035925081831115611463578485fd5b8660208085028301011115611476578485fd5b60200196919550909350505050565b600060208284031215611496578081fd5b5035919050565b600080604083850312156114af578182fd5b50508035926020909101359150565b6000828483379101908152919050565b600082516114e08184602087016116b9565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b602080825282518282018190526000918401906040840190835b8181101561158057835173ffffffffffffffffffffffffffffffffffffffff1683526020938401939092019160010161154c565b509095945050505050565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015611632577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452815180518087526115f5818989018a85016116b9565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016959095018601945092850192908501906001016115b0565b5092979650505050505050565b901515815260200190565b90815260200190565b918252602082015260400190565b9283526020830191909152604082015260600190565b948552602085019390935260408401919091526060830152608082015260a00190565b63ffffffff91909116815260200190565b60ff91909116815260200190565b60005b838110156116d45781810151838201526020016116bc565b838111156116e3576000848401525b5050505056fea365627a7a7231582003a7ab09dc5f117d2ce80223a6c3d71e653458084b714201cda124931a1b9bb66c6578706572696d656e74616cf564736f6c634300050c0040" } } }, @@ -382,8 +386,8 @@ ] } }, - "evmVersion": "constantinople" + "evmVersion": "istanbul" } }, - "networks": {} + "chains": {} } diff --git a/packages/contract-artifacts/artifacts/StaticCallProxy.json b/packages/contract-artifacts/artifacts/StaticCallProxy.json index f89ac63af1..bd934f7072 100644 --- a/packages/contract-artifacts/artifacts/StaticCallProxy.json +++ b/packages/contract-artifacts/artifacts/StaticCallProxy.json @@ -3,6 +3,15 @@ "contractName": "StaticCallProxy", "compilerOutput": { "abi": [ + { + "constant": true, + "inputs": [], + "name": "getProxyId", + "outputs": [{ "internalType": "bytes4", "name": "", "type": "bytes4" }], + "payable": false, + "stateMutability": "pure", + "type": "function" + }, { "constant": true, "inputs": [ @@ -16,15 +25,6 @@ "payable": false, "stateMutability": "view", "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getProxyId", - "outputs": [{ "internalType": "bytes4", "name": "", "type": "bytes4" }], - "payable": false, - "stateMutability": "pure", - "type": "function" } ], "devdoc": { @@ -46,16 +46,16 @@ }, "evm": { "bytecode": { - "object": "0x608060405234801561001057600080fd5b50610505806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063a85e59e41461003b578063ae25532e146100d3575b600080fd5b6100d16004803603608081101561005157600080fd5b81019060208101813564010000000081111561006c57600080fd5b82018360208201111561007e57600080fd5b803590602001918460018302840111640100000000831117156100a057600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610110565b005b6100db6103a5565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b6000606060006101656004898990508a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092949392505063ffffffff6103c5169050565b806020019051606081101561017957600080fd5b8151602083018051604051929492938301929190846401000000008211156101a057600080fd5b9083019060208201858111156101b557600080fd5b82516401000000008111828201881017156101cf57600080fd5b82525081516020918201929091019080838360005b838110156101fc5781810151838201526020016101e4565b50505050905090810190601f1680156102295780820380516001836020036101000a031916815260200191505b5060405260200180519060200190929190505050925092509250600060608473ffffffffffffffffffffffffffffffffffffffff16846040518082805190602001908083835b602083106102ac57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161026f565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d806000811461030c576040519150601f19603f3d011682016040523d82523d6000602084013e610311565b606091505b50915091508161032357805160208201fd5b8051602082012083811461039857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f554e45585045435445445f5354415449435f43414c4c5f524553554c54000000604482015290519081900360640190fd5b5050505050505050505050565b600060405180806104b06021913960210190506040518091039020905090565b6060818311156103e3576103e36103de60008585610408565b6104a7565b83518211156103fc576103fc6103de6001848751610408565b50819003910190815290565b6060632800659560e01b8484846040516024018084600781111561042857fe5b60ff1681526020018381526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090509392505050565b805160208201fdfe53746174696343616c6c28616464726573732c62797465732c6279746573333229a265627a7a72315820c55cf13cfcaaf322238d786911313ce7d45854692241ae9b56709bdbfed4f54c64736f6c634300050b0032" + "object": "0x608060405234801561001057600080fd5b50610505806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063a85e59e41461003b578063ae25532e146100d3575b600080fd5b6100d16004803603608081101561005157600080fd5b81019060208101813564010000000081111561006c57600080fd5b82018360208201111561007e57600080fd5b803590602001918460018302840111640100000000831117156100a057600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610110565b005b6100db6103a5565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b6000606060006101656004898990508a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092949392505063ffffffff6103c5169050565b806020019051606081101561017957600080fd5b8151602083018051604051929492938301929190846401000000008211156101a057600080fd5b9083019060208201858111156101b557600080fd5b82516401000000008111828201881017156101cf57600080fd5b82525081516020918201929091019080838360005b838110156101fc5781810151838201526020016101e4565b50505050905090810190601f1680156102295780820380516001836020036101000a031916815260200191505b5060405260200180519060200190929190505050925092509250600060608473ffffffffffffffffffffffffffffffffffffffff16846040518082805190602001908083835b602083106102ac57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161026f565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d806000811461030c576040519150601f19603f3d011682016040523d82523d6000602084013e610311565b606091505b50915091508161032357805160208201fd5b8051602082012083811461039857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f554e45585045435445445f5354415449435f43414c4c5f524553554c54000000604482015290519081900360640190fd5b5050505050505050505050565b600060405180806104b06021913960210190506040518091039020905090565b6060818311156103e3576103e36103de60008585610408565b6104a7565b83518211156103fc576103fc6103de6001848751610408565b50819003910190815290565b6060632800659560e01b8484846040516024018084600781111561042857fe5b60ff1681526020018381526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090509392505050565b805160208201fdfe53746174696343616c6c28616464726573732c62797465732c6279746573333229a265627a7a72315820810f2cccbd051a63dec5e6c05ccc9a965c4ae8a93e1c2d15b511b833529dfa1064736f6c63430005100032" }, "deployedBytecode": { - "object": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c8063a85e59e41461003b578063ae25532e146100d3575b600080fd5b6100d16004803603608081101561005157600080fd5b81019060208101813564010000000081111561006c57600080fd5b82018360208201111561007e57600080fd5b803590602001918460018302840111640100000000831117156100a057600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610110565b005b6100db6103a5565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b6000606060006101656004898990508a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092949392505063ffffffff6103c5169050565b806020019051606081101561017957600080fd5b8151602083018051604051929492938301929190846401000000008211156101a057600080fd5b9083019060208201858111156101b557600080fd5b82516401000000008111828201881017156101cf57600080fd5b82525081516020918201929091019080838360005b838110156101fc5781810151838201526020016101e4565b50505050905090810190601f1680156102295780820380516001836020036101000a031916815260200191505b5060405260200180519060200190929190505050925092509250600060608473ffffffffffffffffffffffffffffffffffffffff16846040518082805190602001908083835b602083106102ac57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161026f565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d806000811461030c576040519150601f19603f3d011682016040523d82523d6000602084013e610311565b606091505b50915091508161032357805160208201fd5b8051602082012083811461039857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f554e45585045435445445f5354415449435f43414c4c5f524553554c54000000604482015290519081900360640190fd5b5050505050505050505050565b600060405180806104b06021913960210190506040518091039020905090565b6060818311156103e3576103e36103de60008585610408565b6104a7565b83518211156103fc576103fc6103de6001848751610408565b50819003910190815290565b6060632800659560e01b8484846040516024018084600781111561042857fe5b60ff1681526020018381526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090509392505050565b805160208201fdfe53746174696343616c6c28616464726573732c62797465732c6279746573333229a265627a7a72315820c55cf13cfcaaf322238d786911313ce7d45854692241ae9b56709bdbfed4f54c64736f6c634300050b0032" + "object": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c8063a85e59e41461003b578063ae25532e146100d3575b600080fd5b6100d16004803603608081101561005157600080fd5b81019060208101813564010000000081111561006c57600080fd5b82018360208201111561007e57600080fd5b803590602001918460018302840111640100000000831117156100a057600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610110565b005b6100db6103a5565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b6000606060006101656004898990508a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092949392505063ffffffff6103c5169050565b806020019051606081101561017957600080fd5b8151602083018051604051929492938301929190846401000000008211156101a057600080fd5b9083019060208201858111156101b557600080fd5b82516401000000008111828201881017156101cf57600080fd5b82525081516020918201929091019080838360005b838110156101fc5781810151838201526020016101e4565b50505050905090810190601f1680156102295780820380516001836020036101000a031916815260200191505b5060405260200180519060200190929190505050925092509250600060608473ffffffffffffffffffffffffffffffffffffffff16846040518082805190602001908083835b602083106102ac57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161026f565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d806000811461030c576040519150601f19603f3d011682016040523d82523d6000602084013e610311565b606091505b50915091508161032357805160208201fd5b8051602082012083811461039857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f554e45585045435445445f5354415449435f43414c4c5f524553554c54000000604482015290519081900360640190fd5b5050505050505050505050565b600060405180806104b06021913960210190506040518091039020905090565b6060818311156103e3576103e36103de60008585610408565b6104a7565b83518211156103fc576103fc6103de6001848751610408565b50819003910190815290565b6060632800659560e01b8484846040516024018084600781111561042857fe5b60ff1681526020018381526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090509392505050565b805160208201fdfe53746174696343616c6c28616464726573732c62797465732c6279746573333229a265627a7a72315820810f2cccbd051a63dec5e6c05ccc9a965c4ae8a93e1c2d15b511b833529dfa1064736f6c63430005100032" } } }, "compiler": { "name": "solc", - "version": "soljson-v0.5.11+commit.c082d0b4.js", + "version": "soljson-v0.5.16+commit.9c3226ce.js", "settings": { "optimizer": { "enabled": true, @@ -74,8 +74,8 @@ ] } }, - "evmVersion": "constantinople" + "evmVersion": "istanbul" } }, - "networks": {} + "chains": {} } diff --git a/packages/contract-artifacts/artifacts/WETH9.json b/packages/contract-artifacts/artifacts/WETH9.json index f1353ac737..f69ec9777d 100644 --- a/packages/contract-artifacts/artifacts/WETH9.json +++ b/packages/contract-artifacts/artifacts/WETH9.json @@ -4,28 +4,52 @@ "compilerOutput": { "abi": [ { - "constant": true, - "inputs": [], - "name": "name", - "outputs": [{ "name": "", "type": "string" }], - "payable": false, - "stateMutability": "view", - "type": "function" + "anonymous": false, + "inputs": [ + { "indexed": true, "internalType": "address", "name": "_owner", "type": "address" }, + { "indexed": true, "internalType": "address", "name": "_spender", "type": "address" }, + { "indexed": false, "internalType": "uint256", "name": "_value", "type": "uint256" } + ], + "name": "Approval", + "type": "event" }, { - "constant": false, - "inputs": [{ "name": "guy", "type": "address" }, { "name": "wad", "type": "uint256" }], - "name": "approve", - "outputs": [{ "name": "", "type": "bool" }], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" + "anonymous": false, + "inputs": [ + { "indexed": true, "internalType": "address", "name": "_owner", "type": "address" }, + { "indexed": false, "internalType": "uint256", "name": "_value", "type": "uint256" } + ], + "name": "Deposit", + "type": "event" }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "internalType": "address", "name": "_from", "type": "address" }, + { "indexed": true, "internalType": "address", "name": "_to", "type": "address" }, + { "indexed": false, "internalType": "uint256", "name": "_value", "type": "uint256" } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "internalType": "address", "name": "_owner", "type": "address" }, + { "indexed": false, "internalType": "uint256", "name": "_value", "type": "uint256" } + ], + "name": "Withdrawal", + "type": "event" + }, + { "payable": true, "stateMutability": "payable", "type": "fallback" }, { "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [{ "name": "", "type": "uint256" }], + "inputs": [ + { "internalType": "address", "name": "", "type": "address" }, + { "internalType": "address", "name": "", "type": "address" } + ], + "name": "allowance", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "payable": false, "stateMutability": "view", "type": "function" @@ -33,61 +57,33 @@ { "constant": false, "inputs": [ - { "name": "src", "type": "address" }, - { "name": "dst", "type": "address" }, - { "name": "wad", "type": "uint256" } + { "internalType": "address", "name": "guy", "type": "address" }, + { "internalType": "uint256", "name": "wad", "type": "uint256" } ], - "name": "transferFrom", - "outputs": [{ "name": "", "type": "bool" }], + "name": "approve", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { - "constant": false, - "inputs": [{ "name": "wad", "type": "uint256" }], - "name": "withdraw", - "outputs": [], + "constant": true, + "inputs": [{ "internalType": "address", "name": "", "type": "address" }], + "name": "balanceOf", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "payable": false, - "stateMutability": "nonpayable", + "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "decimals", - "outputs": [{ "name": "", "type": "uint8" }], + "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }], "payable": false, "stateMutability": "view", "type": "function" }, - { - "constant": true, - "inputs": [{ "name": "", "type": "address" }], - "name": "balanceOf", - "outputs": [{ "name": "", "type": "uint256" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "symbol", - "outputs": [{ "name": "", "type": "string" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [{ "name": "dst", "type": "address" }, { "name": "wad", "type": "uint256" }], - "name": "transfer", - "outputs": [{ "name": "", "type": "bool" }], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, { "constant": false, "inputs": [], @@ -99,66 +95,79 @@ }, { "constant": true, - "inputs": [{ "name": "", "type": "address" }, { "name": "", "type": "address" }], - "name": "allowance", - "outputs": [{ "name": "", "type": "uint256" }], + "inputs": [], + "name": "name", + "outputs": [{ "internalType": "string", "name": "", "type": "string" }], "payable": false, "stateMutability": "view", "type": "function" }, - { "payable": true, "stateMutability": "payable", "type": "fallback" }, { - "anonymous": false, - "inputs": [ - { "indexed": true, "name": "_owner", "type": "address" }, - { "indexed": true, "name": "_spender", "type": "address" }, - { "indexed": false, "name": "_value", "type": "uint256" } - ], - "name": "Approval", - "type": "event" + "constant": true, + "inputs": [], + "name": "symbol", + "outputs": [{ "internalType": "string", "name": "", "type": "string" }], + "payable": false, + "stateMutability": "view", + "type": "function" }, { - "anonymous": false, - "inputs": [ - { "indexed": true, "name": "_from", "type": "address" }, - { "indexed": true, "name": "_to", "type": "address" }, - { "indexed": false, "name": "_value", "type": "uint256" } - ], - "name": "Transfer", - "type": "event" + "constant": true, + "inputs": [], + "name": "totalSupply", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "payable": false, + "stateMutability": "view", + "type": "function" }, { - "anonymous": false, + "constant": false, "inputs": [ - { "indexed": true, "name": "_owner", "type": "address" }, - { "indexed": false, "name": "_value", "type": "uint256" } + { "internalType": "address", "name": "dst", "type": "address" }, + { "internalType": "uint256", "name": "wad", "type": "uint256" } ], - "name": "Deposit", - "type": "event" + "name": "transfer", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" }, { - "anonymous": false, + "constant": false, "inputs": [ - { "indexed": true, "name": "_owner", "type": "address" }, - { "indexed": false, "name": "_value", "type": "uint256" } + { "internalType": "address", "name": "src", "type": "address" }, + { "internalType": "address", "name": "dst", "type": "address" }, + { "internalType": "uint256", "name": "wad", "type": "uint256" } ], - "name": "Withdrawal", - "type": "event" + "name": "transferFrom", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [{ "internalType": "uint256", "name": "wad", "type": "uint256" }], + "name": "withdraw", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" } ], "devdoc": { "methods": {} }, "evm": { "bytecode": { - "object": "0x60c0604052600d60808190527f577261707065642045746865720000000000000000000000000000000000000060a090815261003e91600091906100a3565b506040805180820190915260048082527f57455448000000000000000000000000000000000000000000000000000000006020909201918252610083916001916100a3565b506002805460ff1916601217905534801561009d57600080fd5b5061013e565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100e457805160ff1916838001178555610111565b82800160010185558215610111579182015b828111156101115782518255916020019190600101906100f6565b5061011d929150610121565b5090565b61013b91905b8082111561011d5760008155600101610127565b90565b61074c8061014d6000396000f3006080604052600436106100925760003560e01c63ffffffff16806306fdde031461009c578063095ea7b31461012657806318160ddd1461016b57806323b872dd146101925780632e1a7d4d146101c9578063313ce567146101e157806370a082311461020c57806395d89b411461023a578063a9059cbb1461024f578063d0e30db014610092578063dd62ed3e14610280575b61009a6102b4565b005b3480156100a857600080fd5b506100b1610303565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100eb5781810151838201526020016100d3565b50505050905090810190601f1680156101185780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561013257600080fd5b5061015773ffffffffffffffffffffffffffffffffffffffff600435166024356103af565b604080519115158252519081900360200190f35b34801561017757600080fd5b50610180610422565b60408051918252519081900360200190f35b34801561019e57600080fd5b5061015773ffffffffffffffffffffffffffffffffffffffff60043581169060243516604435610427565b3480156101d557600080fd5b5061009a6004356105c7565b3480156101ed57600080fd5b506101f661065c565b6040805160ff9092168252519081900360200190f35b34801561021857600080fd5b5061018073ffffffffffffffffffffffffffffffffffffffff60043516610665565b34801561024657600080fd5b506100b1610677565b34801561025b57600080fd5b5061015773ffffffffffffffffffffffffffffffffffffffff600435166024356106ef565b34801561028c57600080fd5b5061018073ffffffffffffffffffffffffffffffffffffffff60043581169060243516610703565b33600081815260036020908152604091829020805434908101909155825190815291517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9281900390910190a2565b6000805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156103a75780601f1061037c576101008083540402835291602001916103a7565b820191906000526020600020905b81548152906001019060200180831161038a57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b303190565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561045957600080fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104cf575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105495773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051157600080fd5b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020805483900390555b73ffffffffffffffffffffffffffffffffffffffff808516600081815260036020908152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35060019392505050565b336000908152600360205260409020548111156105e357600080fd5b33600081815260036020526040808220805485900390555183156108fc0291849190818181858888f19350505050158015610622573d6000803e3d6000fd5b5060408051828152905133917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a250565b60025460ff1681565b60036020526000908152604090205481565b60018054604080516020600284861615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156103a75780601f1061037c576101008083540402835291602001916103a7565b60006106fc338484610427565b9392505050565b6004602090815260009283526040808420909152908252902054815600a165627a7a723058201ebe888a6b56dd871f599adbe0f19ec3c29c28aec0685788dfac9b37a99fc9d20029" + "object": "0x60c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b50610115565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100bb57805160ff19168380011785556100e8565b828001600101855582156100e8579182015b828111156100e85782518255916020019190600101906100cd565b506100f49291506100f8565b5090565b61011291905b808211156100f457600081556001016100fe565b90565b6107f9806101246000396000f3fe6080604052600436106100bc5760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146102cb578063d0e30db0146100bc578063dd62ed3e14610311576100bc565b8063313ce5671461024b57806370a082311461027657806395d89b41146102b6576100bc565b806318160ddd116100a557806318160ddd146101aa57806323b872dd146101d15780632e1a7d4d14610221576100bc565b806306fdde03146100c6578063095ea7b314610150575b6100c4610359565b005b3480156100d257600080fd5b506100db6103a8565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101155781810151838201526020016100fd565b50505050905090810190601f1680156101425780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561015c57600080fd5b506101966004803603604081101561017357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610454565b604080519115158252519081900360200190f35b3480156101b657600080fd5b506101bf6104c7565b60408051918252519081900360200190f35b3480156101dd57600080fd5b50610196600480360360608110156101f457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356104cb565b34801561022d57600080fd5b506100c46004803603602081101561024457600080fd5b503561066b565b34801561025757600080fd5b50610260610700565b6040805160ff9092168252519081900360200190f35b34801561028257600080fd5b506101bf6004803603602081101561029957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610709565b3480156102c257600080fd5b506100db61071b565b3480156102d757600080fd5b50610196600480360360408110156102ee57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610793565b34801561031d57600080fd5b506101bf6004803603604081101561033457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166107a7565b33600081815260036020908152604091829020805434908101909155825190815291517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9281900390910190a2565b6000805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152929183018282801561044c5780601f106104215761010080835404028352916020019161044c565b820191906000526020600020905b81548152906001019060200180831161042f57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b4790565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120548211156104fd57600080fd5b73ffffffffffffffffffffffffffffffffffffffff84163314801590610573575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105ed5773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156105b557600080fd5b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020805483900390555b73ffffffffffffffffffffffffffffffffffffffff808516600081815260036020908152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35060019392505050565b3360009081526003602052604090205481111561068757600080fd5b33600081815260036020526040808220805485900390555183156108fc0291849190818181858888f193505050501580156106c6573d6000803e3d6000fd5b5060408051828152905133917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a250565b60025460ff1681565b60036020526000908152604090205481565b60018054604080516020600284861615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152929183018282801561044c5780601f106104215761010080835404028352916020019161044c565b60006107a03384846104cb565b9392505050565b60046020908152600092835260408084209091529082529020548156fea265627a7a723158201d2ffc56fd216e25b5193800153d8fc3a68d6c94bdd8d1320a5a64ec406bf7a564736f6c63430005100032" }, "deployedBytecode": { - "object": "0x6080604052600436106100925760003560e01c63ffffffff16806306fdde031461009c578063095ea7b31461012657806318160ddd1461016b57806323b872dd146101925780632e1a7d4d146101c9578063313ce567146101e157806370a082311461020c57806395d89b411461023a578063a9059cbb1461024f578063d0e30db014610092578063dd62ed3e14610280575b61009a6102b4565b005b3480156100a857600080fd5b506100b1610303565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100eb5781810151838201526020016100d3565b50505050905090810190601f1680156101185780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561013257600080fd5b5061015773ffffffffffffffffffffffffffffffffffffffff600435166024356103af565b604080519115158252519081900360200190f35b34801561017757600080fd5b50610180610422565b60408051918252519081900360200190f35b34801561019e57600080fd5b5061015773ffffffffffffffffffffffffffffffffffffffff60043581169060243516604435610427565b3480156101d557600080fd5b5061009a6004356105c7565b3480156101ed57600080fd5b506101f661065c565b6040805160ff9092168252519081900360200190f35b34801561021857600080fd5b5061018073ffffffffffffffffffffffffffffffffffffffff60043516610665565b34801561024657600080fd5b506100b1610677565b34801561025b57600080fd5b5061015773ffffffffffffffffffffffffffffffffffffffff600435166024356106ef565b34801561028c57600080fd5b5061018073ffffffffffffffffffffffffffffffffffffffff60043581169060243516610703565b33600081815260036020908152604091829020805434908101909155825190815291517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9281900390910190a2565b6000805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156103a75780601f1061037c576101008083540402835291602001916103a7565b820191906000526020600020905b81548152906001019060200180831161038a57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b303190565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561045957600080fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104cf575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105495773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051157600080fd5b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020805483900390555b73ffffffffffffffffffffffffffffffffffffffff808516600081815260036020908152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35060019392505050565b336000908152600360205260409020548111156105e357600080fd5b33600081815260036020526040808220805485900390555183156108fc0291849190818181858888f19350505050158015610622573d6000803e3d6000fd5b5060408051828152905133917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a250565b60025460ff1681565b60036020526000908152604090205481565b60018054604080516020600284861615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156103a75780601f1061037c576101008083540402835291602001916103a7565b60006106fc338484610427565b9392505050565b6004602090815260009283526040808420909152908252902054815600a165627a7a723058201ebe888a6b56dd871f599adbe0f19ec3c29c28aec0685788dfac9b37a99fc9d20029" + "object": "0x6080604052600436106100bc5760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146102cb578063d0e30db0146100bc578063dd62ed3e14610311576100bc565b8063313ce5671461024b57806370a082311461027657806395d89b41146102b6576100bc565b806318160ddd116100a557806318160ddd146101aa57806323b872dd146101d15780632e1a7d4d14610221576100bc565b806306fdde03146100c6578063095ea7b314610150575b6100c4610359565b005b3480156100d257600080fd5b506100db6103a8565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101155781810151838201526020016100fd565b50505050905090810190601f1680156101425780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561015c57600080fd5b506101966004803603604081101561017357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610454565b604080519115158252519081900360200190f35b3480156101b657600080fd5b506101bf6104c7565b60408051918252519081900360200190f35b3480156101dd57600080fd5b50610196600480360360608110156101f457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356104cb565b34801561022d57600080fd5b506100c46004803603602081101561024457600080fd5b503561066b565b34801561025757600080fd5b50610260610700565b6040805160ff9092168252519081900360200190f35b34801561028257600080fd5b506101bf6004803603602081101561029957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610709565b3480156102c257600080fd5b506100db61071b565b3480156102d757600080fd5b50610196600480360360408110156102ee57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610793565b34801561031d57600080fd5b506101bf6004803603604081101561033457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166107a7565b33600081815260036020908152604091829020805434908101909155825190815291517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9281900390910190a2565b6000805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152929183018282801561044c5780601f106104215761010080835404028352916020019161044c565b820191906000526020600020905b81548152906001019060200180831161042f57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b4790565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120548211156104fd57600080fd5b73ffffffffffffffffffffffffffffffffffffffff84163314801590610573575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105ed5773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156105b557600080fd5b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020805483900390555b73ffffffffffffffffffffffffffffffffffffffff808516600081815260036020908152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35060019392505050565b3360009081526003602052604090205481111561068757600080fd5b33600081815260036020526040808220805485900390555183156108fc0291849190818181858888f193505050501580156106c6573d6000803e3d6000fd5b5060408051828152905133917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a250565b60025460ff1681565b60036020526000908152604090205481565b60018054604080516020600284861615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152929183018282801561044c5780601f106104215761010080835404028352916020019161044c565b60006107a03384846104cb565b9392505050565b60046020908152600092835260408084209091529082529020548156fea265627a7a723158201d2ffc56fd216e25b5193800153d8fc3a68d6c94bdd8d1320a5a64ec406bf7a564736f6c63430005100032" } } }, "compiler": { "name": "solc", - "version": "soljson-v0.4.26+commit.4563c3fc.js", + "version": "soljson-v0.5.16+commit.9c3226ce.js", "settings": { "optimizer": { "enabled": true, @@ -178,8 +187,8 @@ ] } }, - "evmVersion": "constantinople" + "evmVersion": "istanbul" } }, - "networks": {} + "chains": {} } diff --git a/packages/contract-artifacts/artifacts/ZRXToken.json b/packages/contract-artifacts/artifacts/ZRXToken.json index 6784b3b809..5397a33c59 100644 --- a/packages/contract-artifacts/artifacts/ZRXToken.json +++ b/packages/contract-artifacts/artifacts/ZRXToken.json @@ -116,10 +116,10 @@ }, "evm": { "bytecode": { - "object": "0x60606040526b033b2e3c9fd0803ce8000000600355341561001c57fe5b5b600354600160a060020a0333166000908152602081905260409020555b5b61078d8061004a6000396000f300606060405236156100965763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde038114610098578063095ea7b31461014657806318160ddd1461018657806323b872dd146101a8578063313ce567146101ee57806370a082311461021457806395d89b411461024f578063a9059cbb146102fd578063dd62ed3e1461033d575bfe5b34156100a057fe5b6100a861037e565b60408051602080825283518183015283519192839290830191850190808383821561010c575b80518252602083111561010c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016100ce565b505050905090810190601f1680156101385780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561014e57fe5b61017273ffffffffffffffffffffffffffffffffffffffff600435166024356103b5565b604080519115158252519081900360200190f35b341561018e57fe5b61019661042d565b60408051918252519081900360200190f35b34156101b057fe5b61017273ffffffffffffffffffffffffffffffffffffffff60043581169060243516604435610433565b604080519115158252519081900360200190f35b34156101f657fe5b6101fe6105d4565b6040805160ff9092168252519081900360200190f35b341561021c57fe5b61019673ffffffffffffffffffffffffffffffffffffffff600435166105d9565b60408051918252519081900360200190f35b341561025757fe5b6100a8610605565b60408051602080825283518183015283519192839290830191850190808383821561010c575b80518252602083111561010c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016100ce565b505050905090810190601f1680156101385780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561030557fe5b61017273ffffffffffffffffffffffffffffffffffffffff6004351660243561063c565b604080519115158252519081900360200190f35b341561034557fe5b61019673ffffffffffffffffffffffffffffffffffffffff60043581169060243516610727565b60408051918252519081900360200190f35b60408051808201909152601181527f30782050726f746f636f6c20546f6b656e000000000000000000000000000000602082015281565b73ffffffffffffffffffffffffffffffffffffffff338116600081815260016020908152604080832094871680845294825280832086905580518681529051929493927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b60035481565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260016020908152604080832033909516835293815283822054928252819052918220548390108015906104835750828110155b80156104b6575073ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090205483810110155b156105c65773ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220805487019055918716815220805484900390557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156105585773ffffffffffffffffffffffffffffffffffffffff808616600090815260016020908152604080832033909416835292905220805484900390555b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3600191506105cb565b600091505b5b509392505050565b601281565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260409020545b919050565b60408051808201909152600381527f5a52580000000000000000000000000000000000000000000000000000000000602082015281565b73ffffffffffffffffffffffffffffffffffffffff3316600090815260208190526040812054829010801590610699575073ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205482810110155b156107185773ffffffffffffffffffffffffffffffffffffffff33811660008181526020818152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a3506001610427565b506000610427565b5b92915050565b73ffffffffffffffffffffffffffffffffffffffff8083166000908152600160209081526040808320938516835292905220545b929150505600a165627a7a72305820d984298155c708a8164f1cbf83c7275bcc6851dd082c0404013c1f4463b238fa0029" + "object": "0x60606040526b033b2e3c9fd0803ce8000000600355341561001c57fe5b5b600354600160a060020a0333166000908152602081905260409020555b5b61078d8061004a6000396000f300606060405236156100965763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde038114610098578063095ea7b31461014657806318160ddd1461018657806323b872dd146101a8578063313ce567146101ee57806370a082311461021457806395d89b411461024f578063a9059cbb146102fd578063dd62ed3e1461033d575bfe5b34156100a057fe5b6100a861037e565b60408051602080825283518183015283519192839290830191850190808383821561010c575b80518252602083111561010c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016100ce565b505050905090810190601f1680156101385780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561014e57fe5b61017273ffffffffffffffffffffffffffffffffffffffff600435166024356103b5565b604080519115158252519081900360200190f35b341561018e57fe5b61019661042d565b60408051918252519081900360200190f35b34156101b057fe5b61017273ffffffffffffffffffffffffffffffffffffffff60043581169060243516604435610433565b604080519115158252519081900360200190f35b34156101f657fe5b6101fe6105d4565b6040805160ff9092168252519081900360200190f35b341561021c57fe5b61019673ffffffffffffffffffffffffffffffffffffffff600435166105d9565b60408051918252519081900360200190f35b341561025757fe5b6100a8610605565b60408051602080825283518183015283519192839290830191850190808383821561010c575b80518252602083111561010c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016100ce565b505050905090810190601f1680156101385780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561030557fe5b61017273ffffffffffffffffffffffffffffffffffffffff6004351660243561063c565b604080519115158252519081900360200190f35b341561034557fe5b61019673ffffffffffffffffffffffffffffffffffffffff60043581169060243516610727565b60408051918252519081900360200190f35b60408051808201909152601181527f30782050726f746f636f6c20546f6b656e000000000000000000000000000000602082015281565b73ffffffffffffffffffffffffffffffffffffffff338116600081815260016020908152604080832094871680845294825280832086905580518681529051929493927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b60035481565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260016020908152604080832033909516835293815283822054928252819052918220548390108015906104835750828110155b80156104b6575073ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090205483810110155b156105c65773ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220805487019055918716815220805484900390557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156105585773ffffffffffffffffffffffffffffffffffffffff808616600090815260016020908152604080832033909416835292905220805484900390555b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3600191506105cb565b600091505b5b509392505050565b601281565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260409020545b919050565b60408051808201909152600381527f5a52580000000000000000000000000000000000000000000000000000000000602082015281565b73ffffffffffffffffffffffffffffffffffffffff3316600090815260208190526040812054829010801590610699575073ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205482810110155b156107185773ffffffffffffffffffffffffffffffffffffffff33811660008181526020818152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a3506001610427565b506000610427565b5b92915050565b73ffffffffffffffffffffffffffffffffffffffff8083166000908152600160209081526040808320938516835292905220545b929150505600a165627a7a72305820da020366d75ca3a9f2ac8c2e8caa46722a6f27bae293974b944c9572e028e1790029" }, "deployedBytecode": { - "object": "0x606060405236156100965763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde038114610098578063095ea7b31461014657806318160ddd1461018657806323b872dd146101a8578063313ce567146101ee57806370a082311461021457806395d89b411461024f578063a9059cbb146102fd578063dd62ed3e1461033d575bfe5b34156100a057fe5b6100a861037e565b60408051602080825283518183015283519192839290830191850190808383821561010c575b80518252602083111561010c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016100ce565b505050905090810190601f1680156101385780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561014e57fe5b61017273ffffffffffffffffffffffffffffffffffffffff600435166024356103b5565b604080519115158252519081900360200190f35b341561018e57fe5b61019661042d565b60408051918252519081900360200190f35b34156101b057fe5b61017273ffffffffffffffffffffffffffffffffffffffff60043581169060243516604435610433565b604080519115158252519081900360200190f35b34156101f657fe5b6101fe6105d4565b6040805160ff9092168252519081900360200190f35b341561021c57fe5b61019673ffffffffffffffffffffffffffffffffffffffff600435166105d9565b60408051918252519081900360200190f35b341561025757fe5b6100a8610605565b60408051602080825283518183015283519192839290830191850190808383821561010c575b80518252602083111561010c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016100ce565b505050905090810190601f1680156101385780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561030557fe5b61017273ffffffffffffffffffffffffffffffffffffffff6004351660243561063c565b604080519115158252519081900360200190f35b341561034557fe5b61019673ffffffffffffffffffffffffffffffffffffffff60043581169060243516610727565b60408051918252519081900360200190f35b60408051808201909152601181527f30782050726f746f636f6c20546f6b656e000000000000000000000000000000602082015281565b73ffffffffffffffffffffffffffffffffffffffff338116600081815260016020908152604080832094871680845294825280832086905580518681529051929493927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b60035481565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260016020908152604080832033909516835293815283822054928252819052918220548390108015906104835750828110155b80156104b6575073ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090205483810110155b156105c65773ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220805487019055918716815220805484900390557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156105585773ffffffffffffffffffffffffffffffffffffffff808616600090815260016020908152604080832033909416835292905220805484900390555b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3600191506105cb565b600091505b5b509392505050565b601281565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260409020545b919050565b60408051808201909152600381527f5a52580000000000000000000000000000000000000000000000000000000000602082015281565b73ffffffffffffffffffffffffffffffffffffffff3316600090815260208190526040812054829010801590610699575073ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205482810110155b156107185773ffffffffffffffffffffffffffffffffffffffff33811660008181526020818152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a3506001610427565b506000610427565b5b92915050565b73ffffffffffffffffffffffffffffffffffffffff8083166000908152600160209081526040808320938516835292905220545b929150505600a165627a7a72305820d984298155c708a8164f1cbf83c7275bcc6851dd082c0404013c1f4463b238fa0029" + "object": "0x606060405236156100965763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde038114610098578063095ea7b31461014657806318160ddd1461018657806323b872dd146101a8578063313ce567146101ee57806370a082311461021457806395d89b411461024f578063a9059cbb146102fd578063dd62ed3e1461033d575bfe5b34156100a057fe5b6100a861037e565b60408051602080825283518183015283519192839290830191850190808383821561010c575b80518252602083111561010c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016100ce565b505050905090810190601f1680156101385780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561014e57fe5b61017273ffffffffffffffffffffffffffffffffffffffff600435166024356103b5565b604080519115158252519081900360200190f35b341561018e57fe5b61019661042d565b60408051918252519081900360200190f35b34156101b057fe5b61017273ffffffffffffffffffffffffffffffffffffffff60043581169060243516604435610433565b604080519115158252519081900360200190f35b34156101f657fe5b6101fe6105d4565b6040805160ff9092168252519081900360200190f35b341561021c57fe5b61019673ffffffffffffffffffffffffffffffffffffffff600435166105d9565b60408051918252519081900360200190f35b341561025757fe5b6100a8610605565b60408051602080825283518183015283519192839290830191850190808383821561010c575b80518252602083111561010c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016100ce565b505050905090810190601f1680156101385780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561030557fe5b61017273ffffffffffffffffffffffffffffffffffffffff6004351660243561063c565b604080519115158252519081900360200190f35b341561034557fe5b61019673ffffffffffffffffffffffffffffffffffffffff60043581169060243516610727565b60408051918252519081900360200190f35b60408051808201909152601181527f30782050726f746f636f6c20546f6b656e000000000000000000000000000000602082015281565b73ffffffffffffffffffffffffffffffffffffffff338116600081815260016020908152604080832094871680845294825280832086905580518681529051929493927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b60035481565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260016020908152604080832033909516835293815283822054928252819052918220548390108015906104835750828110155b80156104b6575073ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090205483810110155b156105c65773ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220805487019055918716815220805484900390557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156105585773ffffffffffffffffffffffffffffffffffffffff808616600090815260016020908152604080832033909416835292905220805484900390555b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3600191506105cb565b600091505b5b509392505050565b601281565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260409020545b919050565b60408051808201909152600381527f5a52580000000000000000000000000000000000000000000000000000000000602082015281565b73ffffffffffffffffffffffffffffffffffffffff3316600090815260208190526040812054829010801590610699575073ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205482810110155b156107185773ffffffffffffffffffffffffffffffffffffffff33811660008181526020818152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a3506001610427565b506000610427565b5b92915050565b73ffffffffffffffffffffffffffffffffffffffff8083166000908152600160209081526040808320938516835292905220545b929150505600a165627a7a72305820da020366d75ca3a9f2ac8c2e8caa46722a6f27bae293974b944c9572e028e1790029" } } }, @@ -145,8 +145,8 @@ ] } }, - "evmVersion": "constantinople" + "evmVersion": "istanbul" } }, - "networks": {} + "chains": {} } diff --git a/packages/contract-artifacts/artifacts/ZrxVault.json b/packages/contract-artifacts/artifacts/ZrxVault.json index 11f8109231..24aaefcec3 100644 --- a/packages/contract-artifacts/artifacts/ZrxVault.json +++ b/packages/contract-artifacts/artifacts/ZrxVault.json @@ -308,6 +308,10 @@ "details": "Sets the Zrx proxy. Note that only an authorized address can call this function. Note that this can only be called when *not* in Catastrophic Failure mode.", "params": { "_zrxProxyAddress": "Address of the 0x Zrx Proxy." } }, + "transferOwnership(address)": { + "details": "Change the owner of this contract.", + "params": { "newOwner": "New owner address." } + }, "withdrawAllFrom(address)": { "details": "Withdraw ALL Zrx Tokens to `staker` from the vault. Note that this can only be called when *in* Catastrophic Failure mode.", "params": { "staker": "of Zrx Tokens." } @@ -320,10 +324,10 @@ }, "evm": { "bytecode": { - "object": "0x60806040523480156200001157600080fd5b506040516200190238038062001902833981810160405260408110156200003757600080fd5b508051602091820151600080546001600160a01b03199081163317909155600580546001600160a01b0380861691841691909117909155600680549184169190921681179091556040805160248082019390935281518082039093018352604401905292830180516001600160e01b03167ff47261b000000000000000000000000000000000000000000000000000000000178152925191929091620000e091600791620000e9565b5050506200018e565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200012c57805160ff19168380011785556200015c565b828001600101855582156200015c579182015b828111156200015c5782518255916020019190600101906200013f565b506200016a9291506200016e565b5090565b6200018b91905b808211156200016a576000815560010162000175565b90565b611764806200019e6000396000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80639470b0bd116100cd578063c4d8f23711610081578063d39de6e911610066578063d39de6e9146103d1578063f2fde38b14610429578063f957ddba1461045c57610151565b8063c4d8f23714610396578063ca5b02181461039e57610151565b80639ad26744116100b25780639ad2674414610322578063b91816111461035b578063c02e5a7f1461038e57610151565b80639470b0bd146102e15780639706e0c01461031a57610151565b8063494503d4116101245780637071293911610109578063707129391461026157806370a08231146102945780638da5cb5b146102d957610151565b8063494503d4146102115780636bf3f9e51461022e57610151565b806315cc36f214610156578063266df27c1461019157806342f1181e146101ad5780634551ab31146101e0575b600080fd5b61018f6004803603604081101561016c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561048f565b005b610199610676565b604080519115158252519081900360200190f35b61018f600480360360208110156101c357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610697565b6101e86106ab565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101e86004803603602081101561022757600080fd5b50356106c7565b61018f6004803603602081101561024457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166106fb565b61018f6004803603602081101561027757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661077c565b6102c7600480360360208110156102aa57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610836565b60408051918252519081900360200190f35b6101e861085e565b61018f600480360360408110156102f757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561087a565b6102c7610894565b61018f6004803603604081101561033857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610937565b6101996004803603602081101561037157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610949565b61018f61095e565b6101e86109e2565b61018f600480360360208110156103b457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166109fe565b6103d9610a87565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156104155781810151838201526020016103fd565b505050509050019250505060405180910390f35b61018f6004803603602081101561043f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610af6565b6102c76004803603602081101561047257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610b99565b610497610bd9565b61049f610c06565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600460205260409020546104d5908263ffffffff610c3416565b73ffffffffffffffffffffffffffffffffffffffff8316600081815260046020908152604091829020939093558051848152905191927fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c92918290030190a26005546040517fa85e59e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660248301523060448301819052606483018590526080600484019081526007805460027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600183161561010002019091160460848601819052939095169463a85e59e494909388939288929091829160a40190879080156106375780601f1061060c57610100808354040283529160200191610637565b820191906000526020600020905b81548152906001019060200180831161061a57829003601f168201915b505095505050505050600060405180830381600087803b15801561065a57600080fd5b505af115801561066e573d6000803e3d6000fd5b505050505050565b60035474010000000000000000000000000000000000000000900460ff1681565b61069f610c57565b6106a881610c9e565b50565b60055473ffffffffffffffffffffffffffffffffffffffff1681565b600281815481106106d457fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b610703610dcf565b6003805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560408051918252517fb72b2a9919ffd08bc0d415d8a38b1395a40377207a9867cac2e3c10b1aa560fc9181900360200190a150565b610784610c57565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff166107c2576107c26107bd82610df2565b610e75565b60005b600254811015610832578173ffffffffffffffffffffffffffffffffffffffff16600282815481106107f357fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561082a576108258282610e7d565b610832565b6001016107c5565b5050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526004602052604090205490565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b610882610bd9565b61088a610c06565b61083282826110cc565b600654604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009273ffffffffffffffffffffffffffffffffffffffff16916370a08231916024808301926020929190829003018186803b15801561090557600080fd5b505afa158015610919573d6000803e3d6000fd5b505050506040513d602081101561092f57600080fd5b505190505b90565b61093f610c57565b6108328282610e7d565b60016020526000908152604090205460ff1681565b610966610dcf565b61096e610c06565b600380547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040805133815290517fdc2ba7cd6b8e3bf6f27f665a737e34fb7f72f480a597b51686332c539fab04489181900360200190a1565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b610a06610dcf565b610a0e610c06565b6005805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560408051918252517fab1ca8eb645c27b1fa85b29ed92584109de7cc576a907cddaa0bf3f1f7f253109181900360200190a150565b60606002805480602002602001604051908101604052809291908181526020018280548015610aec57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610ac1575b5050505050905090565b610afe610c57565b73ffffffffffffffffffffffffffffffffffffffff8116610b2957610b246107bd61120d565b6106a8565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000610ba3611244565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260046020526040902054610bd383826110cc565b92915050565b60035473ffffffffffffffffffffffffffffffffffffffff163314610c0457610c046107bd33611271565b565b60035474010000000000000000000000000000000000000000900460ff1615610c0457610c046107bd6112f4565b600082820183811015610c5057610c506107bd6000868661132b565b9392505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610c0457600054610c04906107bd90339073ffffffffffffffffffffffffffffffffffffffff166113ca565b73ffffffffffffffffffffffffffffffffffffffff8116610cc457610cc46107bd611456565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff1615610cfe57610cfe6107bd8261148d565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b3360009081526001602052604090205460ff16610c0457610c046107bd33611510565b6040805173ffffffffffffffffffffffffffffffffffffffff83166024808301919091528251808303909101815260449091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167feb5108a200000000000000000000000000000000000000000000000000000000179052919050565b805160208201fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff16610eb657610eb66107bd83610df2565b6002548110610ed157610ed16107bd82600280549050611593565b8173ffffffffffffffffffffffffffffffffffffffff1660028281548110610ef557fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614610f5757610f576107bd60028381548110610f2f57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1684611606565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110610fd257fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff909216918390811061100557fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019061108490826116e8565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260046020526040902054611102908263ffffffff61169216565b73ffffffffffffffffffffffffffffffffffffffff8316600081815260046020908152604091829020939093558051848152905191927f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436492918290030190a2600654604080517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b1580156111dd57600080fd5b505af11580156111f1573d6000803e3d6000fd5b505050506040513d602081101561120757600080fd5b50505050565b60408051808201909152600481527fe69edc3e00000000000000000000000000000000000000000000000000000000602082015290565b60035474010000000000000000000000000000000000000000900460ff16610c0457610c046107bd6116b1565b6040805173ffffffffffffffffffffffffffffffffffffffff83166024808301919091528251808303909101815260449091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fca1d07a200000000000000000000000000000000000000000000000000000000179052919050565b60408051808201909152600481527f7dd020ce00000000000000000000000000000000000000000000000000000000602082015290565b606063e946c1bb60e01b8484846040516024018084600381111561134b57fe5b60ff1681526020018381526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090509392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044808301919091528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1de45ad10000000000000000000000000000000000000000000000000000000017905292915050565b60408051808201909152600481527f57654fe400000000000000000000000000000000000000000000000000000000602082015290565b6040805173ffffffffffffffffffffffffffffffffffffffff83166024808301919091528251808303909101815260449091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fde16f1a000000000000000000000000000000000000000000000000000000000179052919050565b6040805173ffffffffffffffffffffffffffffffffffffffff83166024808301919091528251808303909101815260449091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb65a25b900000000000000000000000000000000000000000000000000000000179052919050565b604080516024810184905260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe9f837710000000000000000000000000000000000000000000000000000000017905292915050565b6040805173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044808301919091528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f140a84db0000000000000000000000000000000000000000000000000000000017905292915050565b6000828211156116ab576116ab6107bd6002858561132b565b50900390565b60408051808201909152600481527f3ef081cc00000000000000000000000000000000000000000000000000000000602082015290565b81548183558181111561170c5760008381526020902061170c918101908301611711565b505050565b61093491905b8082111561172b5760008155600101611717565b509056fea265627a7a7231582076aa219cd66c1764c8a7c96df5b96bdd788590bf2a082860417fc45b656de06664736f6c634300050c0032" + "object": "0x60806040523480156200001157600080fd5b506040516200190238038062001902833981810160405260408110156200003757600080fd5b508051602091820151600080546001600160a01b03199081163317909155600580546001600160a01b0380861691841691909117909155600680549184169190921681179091556040805160248082019390935281518082039093018352604401905292830180516001600160e01b03167ff47261b000000000000000000000000000000000000000000000000000000000178152925191929091620000e091600791620000e9565b5050506200018e565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200012c57805160ff19168380011785556200015c565b828001600101855582156200015c579182015b828111156200015c5782518255916020019190600101906200013f565b506200016a9291506200016e565b5090565b6200018b91905b808211156200016a576000815560010162000175565b90565b611764806200019e6000396000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80639470b0bd116100cd578063c4d8f23711610081578063d39de6e911610066578063d39de6e9146103d1578063f2fde38b14610429578063f957ddba1461045c57610151565b8063c4d8f23714610396578063ca5b02181461039e57610151565b80639ad26744116100b25780639ad2674414610322578063b91816111461035b578063c02e5a7f1461038e57610151565b80639470b0bd146102e15780639706e0c01461031a57610151565b8063494503d4116101245780637071293911610109578063707129391461026157806370a08231146102945780638da5cb5b146102d957610151565b8063494503d4146102115780636bf3f9e51461022e57610151565b806315cc36f214610156578063266df27c1461019157806342f1181e146101ad5780634551ab31146101e0575b600080fd5b61018f6004803603604081101561016c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561048f565b005b610199610676565b604080519115158252519081900360200190f35b61018f600480360360208110156101c357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610697565b6101e86106ab565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101e86004803603602081101561022757600080fd5b50356106c7565b61018f6004803603602081101561024457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166106fb565b61018f6004803603602081101561027757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661077c565b6102c7600480360360208110156102aa57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610836565b60408051918252519081900360200190f35b6101e861085e565b61018f600480360360408110156102f757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561087a565b6102c7610894565b61018f6004803603604081101561033857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610937565b6101996004803603602081101561037157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610949565b61018f61095e565b6101e86109e2565b61018f600480360360208110156103b457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166109fe565b6103d9610a87565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156104155781810151838201526020016103fd565b505050509050019250505060405180910390f35b61018f6004803603602081101561043f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610af6565b6102c76004803603602081101561047257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610b99565b610497610bd9565b61049f610c06565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600460205260409020546104d5908263ffffffff610c3416565b73ffffffffffffffffffffffffffffffffffffffff8316600081815260046020908152604091829020939093558051848152905191927fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c92918290030190a26005546040517fa85e59e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660248301523060448301819052606483018590526080600484019081526007805460027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600183161561010002019091160460848601819052939095169463a85e59e494909388939288929091829160a40190879080156106375780601f1061060c57610100808354040283529160200191610637565b820191906000526020600020905b81548152906001019060200180831161061a57829003601f168201915b505095505050505050600060405180830381600087803b15801561065a57600080fd5b505af115801561066e573d6000803e3d6000fd5b505050505050565b60035474010000000000000000000000000000000000000000900460ff1681565b61069f610c57565b6106a881610c9e565b50565b60055473ffffffffffffffffffffffffffffffffffffffff1681565b600281815481106106d457fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b610703610dcf565b6003805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560408051918252517fb72b2a9919ffd08bc0d415d8a38b1395a40377207a9867cac2e3c10b1aa560fc9181900360200190a150565b610784610c57565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff166107c2576107c26107bd82610df2565b610e75565b60005b600254811015610832578173ffffffffffffffffffffffffffffffffffffffff16600282815481106107f357fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561082a576108258282610e7d565b610832565b6001016107c5565b5050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526004602052604090205490565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b610882610bd9565b61088a610c06565b61083282826110cc565b600654604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009273ffffffffffffffffffffffffffffffffffffffff16916370a08231916024808301926020929190829003018186803b15801561090557600080fd5b505afa158015610919573d6000803e3d6000fd5b505050506040513d602081101561092f57600080fd5b505190505b90565b61093f610c57565b6108328282610e7d565b60016020526000908152604090205460ff1681565b610966610dcf565b61096e610c06565b600380547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040805133815290517fdc2ba7cd6b8e3bf6f27f665a737e34fb7f72f480a597b51686332c539fab04489181900360200190a1565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b610a06610dcf565b610a0e610c06565b6005805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560408051918252517fab1ca8eb645c27b1fa85b29ed92584109de7cc576a907cddaa0bf3f1f7f253109181900360200190a150565b60606002805480602002602001604051908101604052809291908181526020018280548015610aec57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610ac1575b5050505050905090565b610afe610c57565b73ffffffffffffffffffffffffffffffffffffffff8116610b2957610b246107bd61120d565b6106a8565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000610ba3611244565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260046020526040902054610bd383826110cc565b92915050565b60035473ffffffffffffffffffffffffffffffffffffffff163314610c0457610c046107bd33611271565b565b60035474010000000000000000000000000000000000000000900460ff1615610c0457610c046107bd6112f4565b600082820183811015610c5057610c506107bd6000868661132b565b9392505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610c0457600054610c04906107bd90339073ffffffffffffffffffffffffffffffffffffffff166113ca565b73ffffffffffffffffffffffffffffffffffffffff8116610cc457610cc46107bd611456565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff1615610cfe57610cfe6107bd8261148d565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b3360009081526001602052604090205460ff16610c0457610c046107bd33611510565b6040805173ffffffffffffffffffffffffffffffffffffffff83166024808301919091528251808303909101815260449091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167feb5108a200000000000000000000000000000000000000000000000000000000179052919050565b805160208201fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff16610eb657610eb66107bd83610df2565b6002548110610ed157610ed16107bd82600280549050611593565b8173ffffffffffffffffffffffffffffffffffffffff1660028281548110610ef557fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614610f5757610f576107bd60028381548110610f2f57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1684611606565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110610fd257fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff909216918390811061100557fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019061108490826116e8565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260046020526040902054611102908263ffffffff61169216565b73ffffffffffffffffffffffffffffffffffffffff8316600081815260046020908152604091829020939093558051848152905191927f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436492918290030190a2600654604080517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b1580156111dd57600080fd5b505af11580156111f1573d6000803e3d6000fd5b505050506040513d602081101561120757600080fd5b50505050565b60408051808201909152600481527fe69edc3e00000000000000000000000000000000000000000000000000000000602082015290565b60035474010000000000000000000000000000000000000000900460ff16610c0457610c046107bd6116b1565b6040805173ffffffffffffffffffffffffffffffffffffffff83166024808301919091528251808303909101815260449091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fca1d07a200000000000000000000000000000000000000000000000000000000179052919050565b60408051808201909152600481527f7dd020ce00000000000000000000000000000000000000000000000000000000602082015290565b606063e946c1bb60e01b8484846040516024018084600381111561134b57fe5b60ff1681526020018381526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090509392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044808301919091528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1de45ad10000000000000000000000000000000000000000000000000000000017905292915050565b60408051808201909152600481527f57654fe400000000000000000000000000000000000000000000000000000000602082015290565b6040805173ffffffffffffffffffffffffffffffffffffffff83166024808301919091528251808303909101815260449091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fde16f1a000000000000000000000000000000000000000000000000000000000179052919050565b6040805173ffffffffffffffffffffffffffffffffffffffff83166024808301919091528251808303909101815260449091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb65a25b900000000000000000000000000000000000000000000000000000000179052919050565b604080516024810184905260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe9f837710000000000000000000000000000000000000000000000000000000017905292915050565b6040805173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044808301919091528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f140a84db0000000000000000000000000000000000000000000000000000000017905292915050565b6000828211156116ab576116ab6107bd6002858561132b565b50900390565b60408051808201909152600481527f3ef081cc00000000000000000000000000000000000000000000000000000000602082015290565b81548183558181111561170c5760008381526020902061170c918101908301611711565b505050565b61093491905b8082111561172b5760008155600101611717565b509056fea265627a7a723158205da54f86de46429514dfc15695db7c1c01bc4c311c82a0d414fbcf02ab668db664736f6c634300050c0032" }, "deployedBytecode": { - "object": "0x608060405234801561001057600080fd5b50600436106101515760003560e01c80639470b0bd116100cd578063c4d8f23711610081578063d39de6e911610066578063d39de6e9146103d1578063f2fde38b14610429578063f957ddba1461045c57610151565b8063c4d8f23714610396578063ca5b02181461039e57610151565b80639ad26744116100b25780639ad2674414610322578063b91816111461035b578063c02e5a7f1461038e57610151565b80639470b0bd146102e15780639706e0c01461031a57610151565b8063494503d4116101245780637071293911610109578063707129391461026157806370a08231146102945780638da5cb5b146102d957610151565b8063494503d4146102115780636bf3f9e51461022e57610151565b806315cc36f214610156578063266df27c1461019157806342f1181e146101ad5780634551ab31146101e0575b600080fd5b61018f6004803603604081101561016c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561048f565b005b610199610676565b604080519115158252519081900360200190f35b61018f600480360360208110156101c357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610697565b6101e86106ab565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101e86004803603602081101561022757600080fd5b50356106c7565b61018f6004803603602081101561024457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166106fb565b61018f6004803603602081101561027757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661077c565b6102c7600480360360208110156102aa57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610836565b60408051918252519081900360200190f35b6101e861085e565b61018f600480360360408110156102f757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561087a565b6102c7610894565b61018f6004803603604081101561033857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610937565b6101996004803603602081101561037157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610949565b61018f61095e565b6101e86109e2565b61018f600480360360208110156103b457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166109fe565b6103d9610a87565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156104155781810151838201526020016103fd565b505050509050019250505060405180910390f35b61018f6004803603602081101561043f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610af6565b6102c76004803603602081101561047257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610b99565b610497610bd9565b61049f610c06565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600460205260409020546104d5908263ffffffff610c3416565b73ffffffffffffffffffffffffffffffffffffffff8316600081815260046020908152604091829020939093558051848152905191927fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c92918290030190a26005546040517fa85e59e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660248301523060448301819052606483018590526080600484019081526007805460027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600183161561010002019091160460848601819052939095169463a85e59e494909388939288929091829160a40190879080156106375780601f1061060c57610100808354040283529160200191610637565b820191906000526020600020905b81548152906001019060200180831161061a57829003601f168201915b505095505050505050600060405180830381600087803b15801561065a57600080fd5b505af115801561066e573d6000803e3d6000fd5b505050505050565b60035474010000000000000000000000000000000000000000900460ff1681565b61069f610c57565b6106a881610c9e565b50565b60055473ffffffffffffffffffffffffffffffffffffffff1681565b600281815481106106d457fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b610703610dcf565b6003805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560408051918252517fb72b2a9919ffd08bc0d415d8a38b1395a40377207a9867cac2e3c10b1aa560fc9181900360200190a150565b610784610c57565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff166107c2576107c26107bd82610df2565b610e75565b60005b600254811015610832578173ffffffffffffffffffffffffffffffffffffffff16600282815481106107f357fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561082a576108258282610e7d565b610832565b6001016107c5565b5050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526004602052604090205490565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b610882610bd9565b61088a610c06565b61083282826110cc565b600654604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009273ffffffffffffffffffffffffffffffffffffffff16916370a08231916024808301926020929190829003018186803b15801561090557600080fd5b505afa158015610919573d6000803e3d6000fd5b505050506040513d602081101561092f57600080fd5b505190505b90565b61093f610c57565b6108328282610e7d565b60016020526000908152604090205460ff1681565b610966610dcf565b61096e610c06565b600380547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040805133815290517fdc2ba7cd6b8e3bf6f27f665a737e34fb7f72f480a597b51686332c539fab04489181900360200190a1565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b610a06610dcf565b610a0e610c06565b6005805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560408051918252517fab1ca8eb645c27b1fa85b29ed92584109de7cc576a907cddaa0bf3f1f7f253109181900360200190a150565b60606002805480602002602001604051908101604052809291908181526020018280548015610aec57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610ac1575b5050505050905090565b610afe610c57565b73ffffffffffffffffffffffffffffffffffffffff8116610b2957610b246107bd61120d565b6106a8565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000610ba3611244565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260046020526040902054610bd383826110cc565b92915050565b60035473ffffffffffffffffffffffffffffffffffffffff163314610c0457610c046107bd33611271565b565b60035474010000000000000000000000000000000000000000900460ff1615610c0457610c046107bd6112f4565b600082820183811015610c5057610c506107bd6000868661132b565b9392505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610c0457600054610c04906107bd90339073ffffffffffffffffffffffffffffffffffffffff166113ca565b73ffffffffffffffffffffffffffffffffffffffff8116610cc457610cc46107bd611456565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff1615610cfe57610cfe6107bd8261148d565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b3360009081526001602052604090205460ff16610c0457610c046107bd33611510565b6040805173ffffffffffffffffffffffffffffffffffffffff83166024808301919091528251808303909101815260449091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167feb5108a200000000000000000000000000000000000000000000000000000000179052919050565b805160208201fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff16610eb657610eb66107bd83610df2565b6002548110610ed157610ed16107bd82600280549050611593565b8173ffffffffffffffffffffffffffffffffffffffff1660028281548110610ef557fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614610f5757610f576107bd60028381548110610f2f57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1684611606565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110610fd257fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff909216918390811061100557fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019061108490826116e8565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260046020526040902054611102908263ffffffff61169216565b73ffffffffffffffffffffffffffffffffffffffff8316600081815260046020908152604091829020939093558051848152905191927f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436492918290030190a2600654604080517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b1580156111dd57600080fd5b505af11580156111f1573d6000803e3d6000fd5b505050506040513d602081101561120757600080fd5b50505050565b60408051808201909152600481527fe69edc3e00000000000000000000000000000000000000000000000000000000602082015290565b60035474010000000000000000000000000000000000000000900460ff16610c0457610c046107bd6116b1565b6040805173ffffffffffffffffffffffffffffffffffffffff83166024808301919091528251808303909101815260449091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fca1d07a200000000000000000000000000000000000000000000000000000000179052919050565b60408051808201909152600481527f7dd020ce00000000000000000000000000000000000000000000000000000000602082015290565b606063e946c1bb60e01b8484846040516024018084600381111561134b57fe5b60ff1681526020018381526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090509392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044808301919091528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1de45ad10000000000000000000000000000000000000000000000000000000017905292915050565b60408051808201909152600481527f57654fe400000000000000000000000000000000000000000000000000000000602082015290565b6040805173ffffffffffffffffffffffffffffffffffffffff83166024808301919091528251808303909101815260449091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fde16f1a000000000000000000000000000000000000000000000000000000000179052919050565b6040805173ffffffffffffffffffffffffffffffffffffffff83166024808301919091528251808303909101815260449091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb65a25b900000000000000000000000000000000000000000000000000000000179052919050565b604080516024810184905260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe9f837710000000000000000000000000000000000000000000000000000000017905292915050565b6040805173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044808301919091528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f140a84db0000000000000000000000000000000000000000000000000000000017905292915050565b6000828211156116ab576116ab6107bd6002858561132b565b50900390565b60408051808201909152600481527f3ef081cc00000000000000000000000000000000000000000000000000000000602082015290565b81548183558181111561170c5760008381526020902061170c918101908301611711565b505050565b61093491905b8082111561172b5760008155600101611717565b509056fea265627a7a7231582076aa219cd66c1764c8a7c96df5b96bdd788590bf2a082860417fc45b656de06664736f6c634300050c0032" + "object": "0x608060405234801561001057600080fd5b50600436106101515760003560e01c80639470b0bd116100cd578063c4d8f23711610081578063d39de6e911610066578063d39de6e9146103d1578063f2fde38b14610429578063f957ddba1461045c57610151565b8063c4d8f23714610396578063ca5b02181461039e57610151565b80639ad26744116100b25780639ad2674414610322578063b91816111461035b578063c02e5a7f1461038e57610151565b80639470b0bd146102e15780639706e0c01461031a57610151565b8063494503d4116101245780637071293911610109578063707129391461026157806370a08231146102945780638da5cb5b146102d957610151565b8063494503d4146102115780636bf3f9e51461022e57610151565b806315cc36f214610156578063266df27c1461019157806342f1181e146101ad5780634551ab31146101e0575b600080fd5b61018f6004803603604081101561016c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561048f565b005b610199610676565b604080519115158252519081900360200190f35b61018f600480360360208110156101c357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610697565b6101e86106ab565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101e86004803603602081101561022757600080fd5b50356106c7565b61018f6004803603602081101561024457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166106fb565b61018f6004803603602081101561027757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661077c565b6102c7600480360360208110156102aa57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610836565b60408051918252519081900360200190f35b6101e861085e565b61018f600480360360408110156102f757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561087a565b6102c7610894565b61018f6004803603604081101561033857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610937565b6101996004803603602081101561037157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610949565b61018f61095e565b6101e86109e2565b61018f600480360360208110156103b457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166109fe565b6103d9610a87565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156104155781810151838201526020016103fd565b505050509050019250505060405180910390f35b61018f6004803603602081101561043f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610af6565b6102c76004803603602081101561047257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610b99565b610497610bd9565b61049f610c06565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600460205260409020546104d5908263ffffffff610c3416565b73ffffffffffffffffffffffffffffffffffffffff8316600081815260046020908152604091829020939093558051848152905191927fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c92918290030190a26005546040517fa85e59e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660248301523060448301819052606483018590526080600484019081526007805460027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600183161561010002019091160460848601819052939095169463a85e59e494909388939288929091829160a40190879080156106375780601f1061060c57610100808354040283529160200191610637565b820191906000526020600020905b81548152906001019060200180831161061a57829003601f168201915b505095505050505050600060405180830381600087803b15801561065a57600080fd5b505af115801561066e573d6000803e3d6000fd5b505050505050565b60035474010000000000000000000000000000000000000000900460ff1681565b61069f610c57565b6106a881610c9e565b50565b60055473ffffffffffffffffffffffffffffffffffffffff1681565b600281815481106106d457fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b610703610dcf565b6003805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560408051918252517fb72b2a9919ffd08bc0d415d8a38b1395a40377207a9867cac2e3c10b1aa560fc9181900360200190a150565b610784610c57565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff166107c2576107c26107bd82610df2565b610e75565b60005b600254811015610832578173ffffffffffffffffffffffffffffffffffffffff16600282815481106107f357fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561082a576108258282610e7d565b610832565b6001016107c5565b5050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526004602052604090205490565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b610882610bd9565b61088a610c06565b61083282826110cc565b600654604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009273ffffffffffffffffffffffffffffffffffffffff16916370a08231916024808301926020929190829003018186803b15801561090557600080fd5b505afa158015610919573d6000803e3d6000fd5b505050506040513d602081101561092f57600080fd5b505190505b90565b61093f610c57565b6108328282610e7d565b60016020526000908152604090205460ff1681565b610966610dcf565b61096e610c06565b600380547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040805133815290517fdc2ba7cd6b8e3bf6f27f665a737e34fb7f72f480a597b51686332c539fab04489181900360200190a1565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b610a06610dcf565b610a0e610c06565b6005805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560408051918252517fab1ca8eb645c27b1fa85b29ed92584109de7cc576a907cddaa0bf3f1f7f253109181900360200190a150565b60606002805480602002602001604051908101604052809291908181526020018280548015610aec57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610ac1575b5050505050905090565b610afe610c57565b73ffffffffffffffffffffffffffffffffffffffff8116610b2957610b246107bd61120d565b6106a8565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000610ba3611244565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260046020526040902054610bd383826110cc565b92915050565b60035473ffffffffffffffffffffffffffffffffffffffff163314610c0457610c046107bd33611271565b565b60035474010000000000000000000000000000000000000000900460ff1615610c0457610c046107bd6112f4565b600082820183811015610c5057610c506107bd6000868661132b565b9392505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610c0457600054610c04906107bd90339073ffffffffffffffffffffffffffffffffffffffff166113ca565b73ffffffffffffffffffffffffffffffffffffffff8116610cc457610cc46107bd611456565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff1615610cfe57610cfe6107bd8261148d565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b3360009081526001602052604090205460ff16610c0457610c046107bd33611510565b6040805173ffffffffffffffffffffffffffffffffffffffff83166024808301919091528251808303909101815260449091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167feb5108a200000000000000000000000000000000000000000000000000000000179052919050565b805160208201fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff16610eb657610eb66107bd83610df2565b6002548110610ed157610ed16107bd82600280549050611593565b8173ffffffffffffffffffffffffffffffffffffffff1660028281548110610ef557fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614610f5757610f576107bd60028381548110610f2f57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1684611606565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110610fd257fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff909216918390811061100557fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019061108490826116e8565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260046020526040902054611102908263ffffffff61169216565b73ffffffffffffffffffffffffffffffffffffffff8316600081815260046020908152604091829020939093558051848152905191927f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436492918290030190a2600654604080517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b1580156111dd57600080fd5b505af11580156111f1573d6000803e3d6000fd5b505050506040513d602081101561120757600080fd5b50505050565b60408051808201909152600481527fe69edc3e00000000000000000000000000000000000000000000000000000000602082015290565b60035474010000000000000000000000000000000000000000900460ff16610c0457610c046107bd6116b1565b6040805173ffffffffffffffffffffffffffffffffffffffff83166024808301919091528251808303909101815260449091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fca1d07a200000000000000000000000000000000000000000000000000000000179052919050565b60408051808201909152600481527f7dd020ce00000000000000000000000000000000000000000000000000000000602082015290565b606063e946c1bb60e01b8484846040516024018084600381111561134b57fe5b60ff1681526020018381526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090509392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044808301919091528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1de45ad10000000000000000000000000000000000000000000000000000000017905292915050565b60408051808201909152600481527f57654fe400000000000000000000000000000000000000000000000000000000602082015290565b6040805173ffffffffffffffffffffffffffffffffffffffff83166024808301919091528251808303909101815260449091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fde16f1a000000000000000000000000000000000000000000000000000000000179052919050565b6040805173ffffffffffffffffffffffffffffffffffffffff83166024808301919091528251808303909101815260449091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb65a25b900000000000000000000000000000000000000000000000000000000179052919050565b604080516024810184905260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe9f837710000000000000000000000000000000000000000000000000000000017905292915050565b6040805173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044808301919091528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f140a84db0000000000000000000000000000000000000000000000000000000017905292915050565b6000828211156116ab576116ab6107bd6002858561132b565b50900390565b60408051808201909152600481527f3ef081cc00000000000000000000000000000000000000000000000000000000602082015290565b81548183558181111561170c5760008381526020902061170c918101908301611711565b505050565b61093491905b8082111561172b5760008155600101611717565b509056fea265627a7a723158205da54f86de46429514dfc15695db7c1c01bc4c311c82a0d414fbcf02ab668db664736f6c634300050c0032" } } }, @@ -340,6 +344,7 @@ "*": { "*": [ "abi", + "devdoc", "evm.bytecode.object", "evm.bytecode.sourceMap", "evm.deployedBytecode.object", @@ -347,7 +352,7 @@ ] } }, - "evmVersion": "constantinople" + "evmVersion": "istanbul" } }, "chains": {} diff --git a/packages/contract-wrappers/CHANGELOG.json b/packages/contract-wrappers/CHANGELOG.json index 8890ec8902..902e16c54b 100644 --- a/packages/contract-wrappers/CHANGELOG.json +++ b/packages/contract-wrappers/CHANGELOG.json @@ -1,4 +1,13 @@ [ + { + "version": "13.4.0", + "changes": [ + { + "note": "Update all wrappers.", + "pr": 2432 + } + ] + }, { "version": "13.3.0", "changes": [ diff --git a/packages/contract-wrappers/src/generated-wrappers/coordinator.ts b/packages/contract-wrappers/src/generated-wrappers/coordinator.ts index b829e3715c..4a680b7710 100644 --- a/packages/contract-wrappers/src/generated-wrappers/coordinator.ts +++ b/packages/contract-wrappers/src/generated-wrappers/coordinator.ts @@ -40,7 +40,7 @@ export class CoordinatorContract extends BaseContract { * @ignore */ public static deployedBytecode = - '0x6080604052600436106100b15760003560e01c8063da4fe07411610069578063ee55b9681161004e578063ee55b9681461018a578063fb6961cc146101b7578063fdd059a5146101cc576100b1565b8063da4fe07414610162578063e1c7157814610175576100b1565b806389fab5b71161009a57806389fab5b714610109578063b2562b7a1461012b578063c26cfecd14610140576100b1565b80630f7d8e39146100b357806352813679146100e9575b005b3480156100bf57600080fd5b506100d36100ce3660046116c2565b6101ec565b6040516100e09190611a15565b60405180910390f35b3480156100f557600080fd5b506100b1610104366004611889565b610455565b34801561011557600080fd5b5061011e610482565b6040516100e09190611c41565b34801561013757600080fd5b5061011e6104bb565b34801561014c57600080fd5b506101556104f4565b6040516100e09190611ba2565b6100b1610170366004611889565b6104fa565b34801561018157600080fd5b506101556105e8565b34801561019657600080fd5b506101aa6101a5366004611707565b61060c565b6040516100e09190611a36565b3480156101c357600080fd5b50610155610ac0565b3480156101d857600080fd5b506101556101e7366004611775565b610ac6565b80516000908061020a5761020a61020560008686610ad9565b610b7e565b60008360018551038151811061021c57fe5b016020015160f81c90506008811061023d5761023d61020560018787610ad9565b60008160ff16600881111561024e57fe5b9050600081600881111561025e57fe5b14156102785761027361020560028888610ad9565b61043c565b600181600881111561028657fe5b141561029b5761027361020560038888610ad9565b60028160088111156102a957fe5b141561038557826042146102c6576102c661020560008888610ad9565b6000856000815181106102d557fe5b016020015160f81c905060006102f287600163ffffffff610b8616565b9050600061030788602163ffffffff610b8616565b90506001898484846040516000815260200160405260405161032c9493929190611bcf565b6020604051602081039080840390855afa15801561034e573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00151975061044f9650505050505050565b600381600881111561039357fe5b141561043c57826042146103b0576103b061020560008888610ad9565b6000856000815181106103bf57fe5b016020015160f81c905060006103dc87600163ffffffff610b8616565b905060006103f188602163ffffffff610b8616565b905060018960405160200161040691906119e4565b604051602081830303815290604052805190602001208484846040516000815260200160405260405161032c9493929190611bcf565b61044b61020560018888610ad9565b5050505b92915050565b6060610464856080015161060c565b80519091501561047b5761047b8582868686610bb0565b5050505050565b6040518060400160405280601781526020017f30782050726f746f636f6c20436f6f7264696e61746f7200000000000000000081525081565b6040518060400160405280600581526020017f332e302e3000000000000000000000000000000000000000000000000000000081525081565b60015481565b61050684848484610455565b6002546040517f2280c9100000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff1690632280c9109034906105659088908790600401611c54565b6000604051808303818588803b15801561057e57600080fd5b505af1158015610592573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526105d99190810190611742565b506105e2610d5d565b50505050565b7fa6511c04ca44625d50986f8c36bedc09366207a17b96e347094053a9f850716881565b60606000610620838263ffffffff610d7316565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f9b44d5560000000000000000000000000000000000000000000000000000000014806106b357507fffffffff0000000000000000000000000000000000000000000000000000000081167fe14b58c400000000000000000000000000000000000000000000000000000000145b1561073c576106c06112e6565b83516106d690859060049063ffffffff610dbf16565b8060200190516106e991908101906117ff565b604080516001808252818301909252919250816020015b6107086112e6565b815260200190600190039081610700579050509250808360008151811061072b57fe5b602002602001018190525050610aba565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f9694a4020000000000000000000000000000000000000000000000000000000014806107cd57507fffffffff0000000000000000000000000000000000000000000000000000000081167f8ea8dfe400000000000000000000000000000000000000000000000000000000145b8061081957507fffffffff0000000000000000000000000000000000000000000000000000000081167fbeee2e1400000000000000000000000000000000000000000000000000000000145b8061086557507fffffffff0000000000000000000000000000000000000000000000000000000081167f78d29ac100000000000000000000000000000000000000000000000000000000145b806108b157507fffffffff0000000000000000000000000000000000000000000000000000000081167f8bc8efb300000000000000000000000000000000000000000000000000000000145b806108fd57507fffffffff0000000000000000000000000000000000000000000000000000000081167f369da09900000000000000000000000000000000000000000000000000000000145b8061094957507fffffffff0000000000000000000000000000000000000000000000000000000081167fa6c3bf3300000000000000000000000000000000000000000000000000000000145b1561097e57825161096490849060049063ffffffff610dbf16565b8060200190516109779190810190611636565b9150610aba565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f88ec79fb000000000000000000000000000000000000000000000000000000001480610a0f57507fffffffff0000000000000000000000000000000000000000000000000000000081167fb718e29200000000000000000000000000000000000000000000000000000000145b15610aba57610a1c6112e6565b610a246112e6565b8451610a3a90869060049063ffffffff610dbf16565b806020019051610a4d9190810190611832565b60408051600280825260608201909252929450909250816020015b610a706112e6565b815260200190600190039081610a685790505093508184600081518110610a9357fe5b60200260200101819052508084600181518110610aac57fe5b602002602001018190525050505b50919050565b60005481565b600061044f610ad483610e46565b610e99565b606063779c522360e01b848484604051602401610af893929190611c0f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290509392505050565b805160208201fd5b60008160200183511015610ba757610ba76102056005855185602001610ea7565b50016020015190565b3273ffffffffffffffffffffffffffffffffffffffff841614610bd957610bd961020584610ec6565b6000610be786600154610f65565b60408051600080825260208201909252845192935091905b818114610c9057610c0e6113ad565b60405180606001604052808973ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018881525090506000610c4c82610ac6565b90506000610c6d82898681518110610c6057fe5b60200260200101516101ec565b9050610c7f868263ffffffff610f7916565b95505060019092019150610bff9050565b50610ca1823263ffffffff610f7916565b875190925060005b818114610d5157600073ffffffffffffffffffffffffffffffffffffffff16898281518110610cd457fe5b60200260200101516060015173ffffffffffffffffffffffffffffffffffffffff161415610d0157610d49565b6000898281518110610d0f57fe5b60200260200101516040015190506000610d32828761101b90919063ffffffff16565b905080610d4657610d466102058884611053565b50505b600101610ca9565b50505050505050505050565b610d656110f5565b610d7157610d71611103565b565b60008160040183511015610d9457610d946102056003855185600401610ea7565b5001602001517fffffffff000000000000000000000000000000000000000000000000000000001690565b606081831115610dd857610dd861020560008585610ea7565b8351821115610df157610df16102056001848751610ea7565b8282036040519080825280601f01601f191660200182016040528015610e1e576020820181803883390190505b509050610e3f610e2d8261113d565b84610e378761113d565b018351611143565b9392505050565b604081810151825160209384015182519285019290922083517fa6511c04ca44625d50986f8c36bedc09366207a17b96e347094053a9f85071688152948501919091529183015260608201526080902090565b600061044f60005483611207565b6060632800659560e01b848484604051602401610af893929190611bed565b606063a458d7ff60e01b82604051602401610ee19190611a15565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050919050565b6000610e3f82610f7485611241565b611207565b815160405160609184906020808202808401820192910182851015610fa557610fa561020586856112c9565b82851115610fbf57610fb8858583611143565b8497508793505b60018201915060208101905080840192508294508188528460405286886001840381518110610fea57fe5b73ffffffffffffffffffffffffffffffffffffffff9092166020928302919091019091015250959695505050505050565b60006020835102602084018181018192505b8083101561044b5782518086141561104757600194508193505b5060208301925061102d565b606063d789b64060e01b8383604051602401611070929190611bab565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905092915050565b600254610100900460ff1690565b3031801561113a57604051339082156108fc029083906000818181858888f19350505050158015611138573d6000803e3d6000fd5b505b50565b60200190565b602081101561116d576001816020036101000a038019835116818551168082178652505050611202565b8282141561117a57611202565b828211156111b45760208103905080820181840181515b828510156111ac578451865260209586019590940193611191565b905250611202565b60208103905080820181840183515b818612156111fd57825182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe092830192909101906111c3565b855250505b505050565b6040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b608081810151825160208085015160408087015160609788015186519685019690962082517fec69816980a3a3ca4554410e60253953e9ff375ba4536a98adfa15cc71541508815294850195909552908301919091529481019490945273ffffffffffffffffffffffffffffffffffffffff9091169183019190915260a082015260c0902090565b6060635fc8372260e01b8383604051602401611070929190611cca565b604051806101c00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001606081525090565b6040805160608082018352600080835260208301529181019190915290565b803561044f81611d8d565b805161044f81611d8d565b600082601f8301126113f2578081fd5b813561140561140082611cff565b611cd8565b8181529150602080830190840160005b838110156114425761142d876020843589010161144c565b83526020928301929190910190600101611415565b5050505092915050565b600082601f83011261145c578081fd5b813561146a61140082611d1f565b915080825283602082850101111561148157600080fd5b8060208401602084013760009082016020015292915050565b600082601f8301126114aa578081fd5b81516114b861140082611d1f565b91508082528360208285010111156114cf57600080fd5b6114e0816020840160208601611d61565b5092915050565b60006101c08083850312156114fa578182fd5b61150381611cd8565b91505061151083836113d7565b815261151f83602084016113d7565b602082015261153183604084016113d7565b604082015261154383606084016113d7565b60608201526080820151608082015260a082015160a082015260c082015160c082015260e082015160e08201526101008083015181830152506101208083015181830152506101408083015167ffffffffffffffff808211156115a557600080fd5b6115b18683870161149a565b838501526101609250828501519150808211156115cd57600080fd5b6115d98683870161149a565b838501526101809250828501519150808211156115f557600080fd5b6116018683870161149a565b838501526101a092508285015191508082111561161d57600080fd5b5061162a8582860161149a565b82840152505092915050565b60006020808385031215611648578182fd5b825167ffffffffffffffff81111561165e578283fd5b80840185601f82011261166f578384fd5b8051915061167f61140083611cff565b82815283810190828501865b858110156116b4576116a28a8884518801016114e7565b8452928601929086019060010161168b565b509098975050505050505050565b600080604083850312156116d4578081fd5b82359150602083013567ffffffffffffffff8111156116f1578182fd5b6116fd8582860161144c565b9150509250929050565b600060208284031215611718578081fd5b813567ffffffffffffffff81111561172e578182fd5b61173a8482850161144c565b949350505050565b600060208284031215611753578081fd5b815167ffffffffffffffff811115611769578182fd5b61173a8482850161149a565b600060208284031215611786578081fd5b813567ffffffffffffffff8082111561179d578283fd5b818401606081870312156117af578384fd5b6117b96060611cd8565b925080356117c681611d8d565b8352602081810135908401526040810135828111156117e3578485fd5b6117ef8782840161144c565b6040850152509195945050505050565b600060208284031215611810578081fd5b815167ffffffffffffffff811115611826578182fd5b61173a848285016114e7565b60008060408385031215611844578182fd5b825167ffffffffffffffff8082111561185b578384fd5b611867868387016114e7565b9350602085015191508082111561187c578283fd5b506116fd858286016114e7565b6000806000806080858703121561189e578182fd5b843567ffffffffffffffff808211156118b5578384fd5b81870160a0818a0312156118c7578485fd5b6118d160a0611cd8565b92508035835260208101356020840152604081013560408401526118f889606083016113cc565b606084015260808101358281111561190e578586fd5b61191a8a82840161144c565b6080850152505081955061193188602089016113cc565b94506040870135915080821115611946578384fd5b6119528883890161144c565b93506060870135915080821115611967578283fd5b50611974878288016113e2565b91505092959194509250565b73ffffffffffffffffffffffffffffffffffffffff169052565b600081518084526119b2816020860160208601611d61565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015611b95577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845281516101c0611a9a878351611980565b87820151611aaa89890182611980565b506040820151611abd6040890182611980565b506060820151611ad06060890182611980565b506080820151608088015260a082015160a088015260c082015160c088015260e082015160e08801526101008083015181890152506101208083015181890152506101408083015182828a0152611b29838a018261199a565b915050610160915081830151888203838a0152611b46828261199a565b9250505061018080830151888303828a0152611b62838261199a565b9150506101a0915081830151888203838a0152611b7f828261199a565b9850505094870194505090850190600101611a5b565b5092979650505050505050565b90815260200190565b91825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b93845260ff9290921660208401526040830152606082015260800190565b6060810160088510611bfb57fe5b938152602081019290925260409091015290565b600060048510611c1b57fe5b84825283602083015260606040830152611c38606083018461199a565b95945050505050565b600060208252610e3f602083018461199a565b60006040825283516040830152602084015160608301526040840151608083015273ffffffffffffffffffffffffffffffffffffffff60608501511660a0830152608084015160a060c0840152611cae60e084018261199a565b8381036020850152611cc0818661199a565b9695505050505050565b918252602082015260400190565b60405181810167ffffffffffffffff81118282101715611cf757600080fd5b604052919050565b600067ffffffffffffffff821115611d15578081fd5b5060209081020190565b600067ffffffffffffffff821115611d35578081fd5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b83811015611d7c578181015183820152602001611d64565b838111156105e25750506000910152565b73ffffffffffffffffffffffffffffffffffffffff8116811461113a57600080fd5b8351602094850120835193850193909320604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f815295860194909452928401929092526060830152608082015260a090209056fea365627a7a72315820efc81773b7912bf9e2c93c985afa2b6feee69452023986811fc84107b08ecc776c6578706572696d656e74616cf564736f6c634300050d0040'; + '0x6080604052600436106100b15760003560e01c8063da4fe07411610069578063ee55b9681161004e578063ee55b9681461018a578063fb6961cc146101b7578063fdd059a5146101cc576100b1565b8063da4fe07414610162578063e1c7157814610175576100b1565b806389fab5b71161009a57806389fab5b714610109578063b2562b7a1461012b578063c26cfecd14610140576100b1565b80630f7d8e39146100b357806352813679146100e9575b005b3480156100bf57600080fd5b506100d36100ce3660046116c1565b6101ec565b6040516100e09190611a14565b60405180910390f35b3480156100f557600080fd5b506100b1610104366004611888565b610455565b34801561011557600080fd5b5061011e610482565b6040516100e09190611c40565b34801561013757600080fd5b5061011e6104bb565b34801561014c57600080fd5b506101556104f4565b6040516100e09190611ba1565b6100b1610170366004611888565b6104fa565b34801561018157600080fd5b506101556105e8565b34801561019657600080fd5b506101aa6101a5366004611706565b61060c565b6040516100e09190611a35565b3480156101c357600080fd5b50610155610ac0565b3480156101d857600080fd5b506101556101e7366004611774565b610ac6565b80516000908061020a5761020a61020560008686610ad9565b610b7e565b60008360018551038151811061021c57fe5b016020015160f81c90506008811061023d5761023d61020560018787610ad9565b60008160ff16600881111561024e57fe5b9050600081600881111561025e57fe5b14156102785761027361020560028888610ad9565b61043c565b600181600881111561028657fe5b141561029b5761027361020560038888610ad9565b60028160088111156102a957fe5b141561038557826042146102c6576102c661020560008888610ad9565b6000856000815181106102d557fe5b016020015160f81c905060006102f287600163ffffffff610b8616565b9050600061030788602163ffffffff610b8616565b90506001898484846040516000815260200160405260405161032c9493929190611bce565b6020604051602081039080840390855afa15801561034e573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00151975061044f9650505050505050565b600381600881111561039357fe5b141561043c57826042146103b0576103b061020560008888610ad9565b6000856000815181106103bf57fe5b016020015160f81c905060006103dc87600163ffffffff610b8616565b905060006103f188602163ffffffff610b8616565b905060018960405160200161040691906119e3565b604051602081830303815290604052805190602001208484846040516000815260200160405260405161032c9493929190611bce565b61044b61020560018888610ad9565b5050505b92915050565b6060610464856080015161060c565b80519091501561047b5761047b8582868686610bb0565b5050505050565b6040518060400160405280601781526020017f30782050726f746f636f6c20436f6f7264696e61746f7200000000000000000081525081565b6040518060400160405280600581526020017f332e302e3000000000000000000000000000000000000000000000000000000081525081565b60015481565b61050684848484610455565b6002546040517f2280c9100000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff1690632280c9109034906105659088908790600401611c53565b6000604051808303818588803b15801561057e57600080fd5b505af1158015610592573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526105d99190810190611741565b506105e2610d5d565b50505050565b7fa6511c04ca44625d50986f8c36bedc09366207a17b96e347094053a9f850716881565b60606000610620838263ffffffff610d7316565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f9b44d5560000000000000000000000000000000000000000000000000000000014806106b357507fffffffff0000000000000000000000000000000000000000000000000000000081167fe14b58c400000000000000000000000000000000000000000000000000000000145b1561073c576106c06112e5565b83516106d690859060049063ffffffff610dbf16565b8060200190516106e991908101906117fe565b604080516001808252818301909252919250816020015b6107086112e5565b815260200190600190039081610700579050509250808360008151811061072b57fe5b602002602001018190525050610aba565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f9694a4020000000000000000000000000000000000000000000000000000000014806107cd57507fffffffff0000000000000000000000000000000000000000000000000000000081167f8ea8dfe400000000000000000000000000000000000000000000000000000000145b8061081957507fffffffff0000000000000000000000000000000000000000000000000000000081167fbeee2e1400000000000000000000000000000000000000000000000000000000145b8061086557507fffffffff0000000000000000000000000000000000000000000000000000000081167f78d29ac100000000000000000000000000000000000000000000000000000000145b806108b157507fffffffff0000000000000000000000000000000000000000000000000000000081167f8bc8efb300000000000000000000000000000000000000000000000000000000145b806108fd57507fffffffff0000000000000000000000000000000000000000000000000000000081167f369da09900000000000000000000000000000000000000000000000000000000145b8061094957507fffffffff0000000000000000000000000000000000000000000000000000000081167fa6c3bf3300000000000000000000000000000000000000000000000000000000145b1561097e57825161096490849060049063ffffffff610dbf16565b8060200190516109779190810190611635565b9150610aba565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f88ec79fb000000000000000000000000000000000000000000000000000000001480610a0f57507fffffffff0000000000000000000000000000000000000000000000000000000081167fb718e29200000000000000000000000000000000000000000000000000000000145b15610aba57610a1c6112e5565b610a246112e5565b8451610a3a90869060049063ffffffff610dbf16565b806020019051610a4d9190810190611831565b60408051600280825260608201909252929450909250816020015b610a706112e5565b815260200190600190039081610a685790505093508184600081518110610a9357fe5b60200260200101819052508084600181518110610aac57fe5b602002602001018190525050505b50919050565b60005481565b600061044f610ad483610e46565b610e99565b606063779c522360e01b848484604051602401610af893929190611c0e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290509392505050565b805160208201fd5b60008160200183511015610ba757610ba76102056005855185602001610ea7565b50016020015190565b3273ffffffffffffffffffffffffffffffffffffffff841614610bd957610bd961020584610ec6565b6000610be786600154610f65565b60408051600080825260208201909252845192935091905b818114610c9057610c0e6113ac565b60405180606001604052808973ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018881525090506000610c4c82610ac6565b90506000610c6d82898681518110610c6057fe5b60200260200101516101ec565b9050610c7f868263ffffffff610f7916565b95505060019092019150610bff9050565b50610ca1823263ffffffff610f7916565b875190925060005b818114610d5157600073ffffffffffffffffffffffffffffffffffffffff16898281518110610cd457fe5b60200260200101516060015173ffffffffffffffffffffffffffffffffffffffff161415610d0157610d49565b6000898281518110610d0f57fe5b60200260200101516040015190506000610d32828761101b90919063ffffffff16565b905080610d4657610d466102058884611053565b50505b600101610ca9565b50505050505050505050565b610d656110f5565b610d7157610d71611103565b565b60008160040183511015610d9457610d946102056003855185600401610ea7565b5001602001517fffffffff000000000000000000000000000000000000000000000000000000001690565b606081831115610dd857610dd861020560008585610ea7565b8351821115610df157610df16102056001848751610ea7565b8282036040519080825280601f01601f191660200182016040528015610e1e576020820181803883390190505b509050610e3f610e2d8261113c565b84610e378761113c565b018351611142565b9392505050565b604081810151825160209384015182519285019290922083517fa6511c04ca44625d50986f8c36bedc09366207a17b96e347094053a9f85071688152948501919091529183015260608201526080902090565b600061044f60005483611206565b6060632800659560e01b848484604051602401610af893929190611bec565b606063a458d7ff60e01b82604051602401610ee19190611a14565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050919050565b6000610e3f82610f7485611240565b611206565b815160405160609184906020808202808401820192910182851015610fa557610fa561020586856112c8565b82851115610fbf57610fb8858583611142565b8497508793505b60018201915060208101905080840192508294508188528460405286886001840381518110610fea57fe5b73ffffffffffffffffffffffffffffffffffffffff9092166020928302919091019091015250959695505050505050565b60006020835102602084018181018192505b8083101561044b5782518086141561104757600194508193505b5060208301925061102d565b606063d789b64060e01b8383604051602401611070929190611baa565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905092915050565b600254610100900460ff1690565b47801561113957604051339082156108fc029083906000818181858888f19350505050158015611137573d6000803e3d6000fd5b505b50565b60200190565b602081101561116c576001816020036101000a038019835116818551168082178652505050611201565b8282141561117957611201565b828211156111b35760208103905080820181840181515b828510156111ab578451865260209586019590940193611190565b905250611201565b60208103905080820181840183515b818612156111fc57825182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe092830192909101906111c2565b855250505b505050565b6040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b608081810151825160208085015160408087015160609788015186519685019690962082517fec69816980a3a3ca4554410e60253953e9ff375ba4536a98adfa15cc71541508815294850195909552908301919091529481019490945273ffffffffffffffffffffffffffffffffffffffff9091169183019190915260a082015260c0902090565b6060635fc8372260e01b8383604051602401611070929190611cc9565b604051806101c00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001606081525090565b6040805160608082018352600080835260208301529181019190915290565b803561044f81611d8c565b805161044f81611d8c565b600082601f8301126113f1578081fd5b81356114046113ff82611cfe565b611cd7565b8181529150602080830190840160005b838110156114415761142c876020843589010161144b565b83526020928301929190910190600101611414565b5050505092915050565b600082601f83011261145b578081fd5b81356114696113ff82611d1e565b915080825283602082850101111561148057600080fd5b8060208401602084013760009082016020015292915050565b600082601f8301126114a9578081fd5b81516114b76113ff82611d1e565b91508082528360208285010111156114ce57600080fd5b6114df816020840160208601611d60565b5092915050565b60006101c08083850312156114f9578182fd5b61150281611cd7565b91505061150f83836113d6565b815261151e83602084016113d6565b602082015261153083604084016113d6565b604082015261154283606084016113d6565b60608201526080820151608082015260a082015160a082015260c082015160c082015260e082015160e08201526101008083015181830152506101208083015181830152506101408083015167ffffffffffffffff808211156115a457600080fd5b6115b086838701611499565b838501526101609250828501519150808211156115cc57600080fd5b6115d886838701611499565b838501526101809250828501519150808211156115f457600080fd5b61160086838701611499565b838501526101a092508285015191508082111561161c57600080fd5b5061162985828601611499565b82840152505092915050565b60006020808385031215611647578182fd5b825167ffffffffffffffff81111561165d578283fd5b80840185601f82011261166e578384fd5b8051915061167e6113ff83611cfe565b82815283810190828501865b858110156116b3576116a18a8884518801016114e6565b8452928601929086019060010161168a565b509098975050505050505050565b600080604083850312156116d3578081fd5b82359150602083013567ffffffffffffffff8111156116f0578182fd5b6116fc8582860161144b565b9150509250929050565b600060208284031215611717578081fd5b813567ffffffffffffffff81111561172d578182fd5b6117398482850161144b565b949350505050565b600060208284031215611752578081fd5b815167ffffffffffffffff811115611768578182fd5b61173984828501611499565b600060208284031215611785578081fd5b813567ffffffffffffffff8082111561179c578283fd5b818401606081870312156117ae578384fd5b6117b86060611cd7565b925080356117c581611d8c565b8352602081810135908401526040810135828111156117e2578485fd5b6117ee8782840161144b565b6040850152509195945050505050565b60006020828403121561180f578081fd5b815167ffffffffffffffff811115611825578182fd5b611739848285016114e6565b60008060408385031215611843578182fd5b825167ffffffffffffffff8082111561185a578384fd5b611866868387016114e6565b9350602085015191508082111561187b578283fd5b506116fc858286016114e6565b6000806000806080858703121561189d578182fd5b843567ffffffffffffffff808211156118b4578384fd5b81870160a0818a0312156118c6578485fd5b6118d060a0611cd7565b92508035835260208101356020840152604081013560408401526118f789606083016113cb565b606084015260808101358281111561190d578586fd5b6119198a82840161144b565b6080850152505081955061193088602089016113cb565b94506040870135915080821115611945578384fd5b6119518883890161144b565b93506060870135915080821115611966578283fd5b50611973878288016113e1565b91505092959194509250565b73ffffffffffffffffffffffffffffffffffffffff169052565b600081518084526119b1816020860160208601611d60565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015611b94577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845281516101c0611a9987835161197f565b87820151611aa98989018261197f565b506040820151611abc604089018261197f565b506060820151611acf606089018261197f565b506080820151608088015260a082015160a088015260c082015160c088015260e082015160e08801526101008083015181890152506101208083015181890152506101408083015182828a0152611b28838a0182611999565b915050610160915081830151888203838a0152611b458282611999565b9250505061018080830151888303828a0152611b618382611999565b9150506101a0915081830151888203838a0152611b7e8282611999565b9850505094870194505090850190600101611a5a565b5092979650505050505050565b90815260200190565b91825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b93845260ff9290921660208401526040830152606082015260800190565b6060810160088510611bfa57fe5b938152602081019290925260409091015290565b600060048510611c1a57fe5b84825283602083015260606040830152611c376060830184611999565b95945050505050565b600060208252610e3f6020830184611999565b60006040825283516040830152602084015160608301526040840151608083015273ffffffffffffffffffffffffffffffffffffffff60608501511660a0830152608084015160a060c0840152611cad60e0840182611999565b8381036020850152611cbf8186611999565b9695505050505050565b918252602082015260400190565b60405181810167ffffffffffffffff81118282101715611cf657600080fd5b604052919050565b600067ffffffffffffffff821115611d14578081fd5b5060209081020190565b600067ffffffffffffffff821115611d34578081fd5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b83811015611d7b578181015183820152602001611d63565b838111156105e25750506000910152565b73ffffffffffffffffffffffffffffffffffffffff8116811461113957600080fd5b8351602094850120835193850193909320604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f815295860194909452928401929092526060830152608082015260a090209056fea365627a7a72315820926abd0f9ec1c8b67d93fbc87771f0336fe827fb0a1927bf1606417cd86e97966c6578706572696d656e74616cf564736f6c63430005100040'; public static contractName = 'Coordinator'; private readonly _methodABIIndex: { [name: string]: number } = {}; public static async deployFrom0xArtifactAsync( diff --git a/packages/contract-wrappers/src/generated-wrappers/dev_utils.ts b/packages/contract-wrappers/src/generated-wrappers/dev_utils.ts index 91cfefba3a..1cc1823344 100644 --- a/packages/contract-wrappers/src/generated-wrappers/dev_utils.ts +++ b/packages/contract-wrappers/src/generated-wrappers/dev_utils.ts @@ -40,7 +40,7 @@ export class DevUtilsContract extends BaseContract { * @ignore */ public static deployedBytecode = - '0x608060405234801561001057600080fd5b50600436106102745760003560e01c80639a7e752611610151578063ca49f47c116100c3578063d3d862d111610087578063d3d862d1146106a9578063d4695028146106bc578063e25cabf7146106dc578063e4e6e7da146106fe578063e77286eb1461071f578063ee4f5a941461074157610274565b8063ca49f47c1461062c578063cafd3a071461064f578063d001c5dc14610670578063d186037f14610683578063d36379051461069657610274565b8063a6627e9f11610115578063a6627e9f14610598578063acaedc74146105ab578063b43cffe1146105ce578063bbb2dcf6146105e1578063bc03f96414610603578063c26cfecd1461062457610274565b80639a7e75261461050b5780639eadc8351461052e578063a070cac814610552578063a0901e5114610565578063a5cd62ba1461057857610274565b80634dfdac20116101ea5780637914b2ec116101ae5780637914b2ec146104705780637982653e1461049157806379c9c426146104b15780637b66ad34146104c45780637d727512146104e55780638f4ce479146104f857610274565b80634dfdac20146103d8578063590aa875146103f857806363eb399214610418578063651290421461042b5780636f83188e1461044d57610274565b8063314853ff1161023c578063314853ff14610328578063327d30541461034a57806332aae3ad1461035d5780633db6dc611461037f578063459be5e2146103a257806346eb65cb146103c357610274565b806302d0aec31461027957806304a5618a146102a35780630d7b7d76146102c5578063165979e1146102e65780632322cf7614610308575b600080fd5b61028c610287366004614851565b610763565b60405161029a92919061528b565b60405180910390f35b6102b66102b1366004614851565b6107bf565b60405161029a9392919061537d565b6102d86102d336600461438f565b61083a565b60405161029a929190615239565b6102f96102f4366004614851565b61085c565b60405161029a939291906154b7565b61031b61031636600461438f565b6108b9565b60405161029a91906151f4565b61033b610336366004614851565b6108e1565b60405161029a93929190615260565b6102d8610358366004614851565b610928565b61037061036b366004614851565b61096a565b60405161029a9392919061542d565b61039261038d366004614851565b6109bd565b60405161029a94939291906151fd565b6103b56103b0366004614851565b610a07565b60405161029a9291906154a0565b6103d66103d1366004614851565b610a5d565b005b6103eb6103e63660046142b8565b610b59565b60405161029a919061518e565b61040b610406366004614133565b610bdc565b60405161029a91906153dc565b61040b6104263660046143d2565b610c32565b61043e610439366004614851565b610c8f565b60405161029a93929190614f43565b61046061045b366004614851565b610cc9565b60405161029a949392919061552c565b61048361047e366004614851565b6114d6565b60405161029a9291906152bd565b6104a461049f3660046148fa565b61150e565b60405161029a91906154d2565b61031b6104bf366004614aa9565b611795565b6104d76104d2366004614851565b6117f4565b60405161029a929190614f29565b61031b6104f336600461438f565b61182c565b610483610506366004614851565b611daf565b61051e610519366004614851565b611e0c565b60405161029a94939291906154e6565b61054161053c366004614851565b611e6d565b60405161029a9594939291906152e0565b61031b6105603660046149a7565b611ee5565b6103eb610573366004614453565b611f3c565b61058b6105863660046144b7565b611fb5565b60405161029a9190615095565b61040b6105a6366004614428565b612078565b6105be6105b9366004614851565b6120d1565b60405161029a9493929190614fef565b61040b6105dc366004614305565b61210d565b6105f46105ef366004614851565b61216c565b60405161029a939291906153a8565b610616610611366004614851565b6121e6565b60405161029a929190615247565b61031b61221f565b61063f61063a366004614851565b612225565b60405161029a9493929190615338565b61066261065d366004614851565b6122a3565b60405161029a92919061551f565b6103eb61067e3660046142b8565b6122f1565b61031b61069136600461438f565b61235f565b6104a46106a43660046148fa565b6127e9565b61040b6106b736600461465b565b612b49565b6106cf6106ca366004614851565b612b68565b60405161029a91906152a8565b6106ef6106ea36600461453a565b612c1d565b60405161029a939291906150e2565b61071161070c3660046142b8565b612d55565b60405161029a9291906151cf565b61073261072d366004614951565b612d6e565b60405161029a93929190615692565b61075461074f366004614851565b612fa6565b60405161029a93929190615476565b60008061077783610772612fe3565b612fee565b6000610790600485518661302e9092919063ffffffff16565b8060200190516107a39190810190614804565b909350905060ff811660068111156107b757fe5b915050915091565b600080806107d3848263ffffffff61307116565b92506001600160e01b0319831663012b8bc960e11b1461080e5760405162461bcd60e51b81526004016108059061566a565b60405180910390fd5b61081f84601063ffffffff6130a516565b915061083284602463ffffffff6130d816565b929491935050565b600080610847848461182c565b9150610853848461235f565b90509250929050565b600080600061086d846107726130e4565b6000610886600486518761302e9092919063ffffffff16565b8060200190516108999190810190614c84565b9094509250905060ff811660028111156108af57fe5b9350509193909250565b60008060006108c8858561083a565b915091506108d682826130ef565b925050505b92915050565b60006060806108f284610772613105565b835161090890859060049063ffffffff61302e16565b80602001905161091b91908101906147a5565b9196909550909350915050565b60008061093783610772613110565b825161094d90849060049063ffffffff61302e16565b8060200190516109609190810190614748565b9094909350915050565b600080606061097b8461077261311b565b6000610994600486518761302e9092919063ffffffff16565b8060200190516109a79190810190614c39565b9094509250905060ff811660018111156108af57fe5b6000806060806109cf85610772613126565b84516109e590869060049063ffffffff61302e16565b8060200190516109f89190810190614705565b92989197509550909350915050565b600080610a1683610772613131565b6000610a2f600485518661302e9092919063ffffffff16565b806020019051610a429190810190614b78565b9250905060ff81166003811115610a5557fe5b925050915091565b6000610a6f828263ffffffff61307116565b90506001600160e01b03198116630f47261b60e41b1415610a9a57610a9382611daf565b5050610b55565b6001600160e01b0319811663012b8bc960e11b1415610ac457610abc826107bf565b505050610b55565b6001600160e01b0319811663a7cb5fb760e01b1415610af057610ae682611e6d565b5050505050610b55565b6001600160e01b031981166394cfcdd760e01b1415610b1257610abc8261216c565b6001600160e01b0319811663619ce88560e11b1415610b3d57610b3482612225565b50505050610b55565b60405162461bcd60e51b81526004016108059061566a565b5050565b606060008251905080604051908082528060200260200182016040528015610b8b578160200160208202803883390190505b50915060005b818114610bd457610bb585858381518110610ba857fe5b602002602001015161235f565b838281518110610bc157fe5b6020908102919091010152600101610b91565b505092915050565b604051606090630f47261b60e41b90610bf9908490602401614f15565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050919050565b60405160609063619ce88560e11b90610c5390869086908690602401614fbb565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915290505b9392505050565b6000806000610ca08461077261313c565b8351610cb690859060049063ffffffff61302e16565b80602001905161091b9190810190614188565b60608080806000610ce0868263ffffffff61307116565b90506001600160e01b0319811663dedfc1f160e01b1415610d2c5760405180604001604052806011815260200170626174636843616e63656c4f726465727360781b81525094506110d8565b6001600160e01b03198116634b4a520160e11b1415610d74576040518060400160405280600f81526020016e626174636846696c6c4f726465727360881b81525094506110d8565b6001600160e01b031981166323aa37f960e21b1415610dc35760405180604001604052806016815260200175626174636846696c6c4f72646572734e6f5468726f7760501b81525094506110d8565b6001600160e01b03198116632fbb8b8560e21b1415610e115760405180604001604052806015815260200174626174636846696c6c4f724b696c6c4f726465727360581b81525094506110d8565b6001600160e01b03198116632da6298760e01b1415610e55576040518060400160405280600b81526020016a31b0b731b2b627b93232b960a91b81525094506110d8565b6001600160e01b03198116634da26aab60e11b1415610e9757604051806040016040528060098152602001683334b63627b93232b960b91b81525094506110d8565b6001600160e01b03198116633852d63160e21b1415610edf576040518060400160405280600f81526020016e3334b63627b925b4b63627b93232b960891b81525094506110d8565b6001600160e01b031981166378d29ac160e01b1415610f2e57604051806040016040528060168152602001756d61726b65744275794f72646572734e6f5468726f7760501b81525094506110d8565b6001600160e01b0319811663369da09960e01b1415610f84576040518060400160405280601781526020017f6d61726b657453656c6c4f72646572734e6f5468726f7700000000000000000081525094506110d8565b6001600160e01b03198116638bc8efb360e01b1415610fda576040518060400160405280601981526020017f6d61726b65744275794f726465727346696c6c4f724b696c6c0000000000000081525094506110d8565b6001600160e01b0319811663a6c3bf3360e01b1415611030576040518060400160405280601a81526020017f6d61726b657453656c6c4f726465727346696c6c4f724b696c6c00000000000081525094506110d8565b6001600160e01b031981166388ec79fb60e01b1415611074576040518060400160405280600b81526020016a6d617463684f726465727360a81b81525094506110d8565b6001600160e01b03198116634f9559b160e01b14806110a357506001600160e01b031981166302280c9160e41b145b156110c05760405162461bcd60e51b81526004016108059061561d565b60405162461bcd60e51b8152600401610805906155e6565b6001600160e01b0319811663dedfc1f160e01b141561116457855161110790879060049063ffffffff61314716565b80602001905161111a9190810190614485565b604080516000808252602082019092529195505b506040805160008082526020820190925291945061115c565b60608152602001906001900390816111475790505b5091506114ce565b6001600160e01b03198116632fbb8b8560e21b148061119357506001600160e01b03198116634b4a520160e11b145b806111ae57506001600160e01b031981166323aa37f960e21b145b156111c8576111bc866131c7565b919550935091506114ce565b6001600160e01b03198116632da6298760e01b14156112975760408051600180825281830190925290816020015b6111fe613a68565b8152602001906001900390816111f6575050865190945061122990879060049063ffffffff61314716565b80602001905161123c91908101906148c8565b8460008151811061124957fe5b6020026020010181905250600060405190808252806020026020018201604052801561112e57816020016020820280388339019050506040805160008082526020820190925291945061115c565b6001600160e01b03198116633852d63160e21b14806112c657506001600160e01b03198116634da26aab60e11b145b156112d4576111bc866131f6565b6001600160e01b031981166378d29ac160e01b148061130357506001600160e01b0319811663369da09960e01b145b8061131e57506001600160e01b03198116638bc8efb360e01b145b8061133957506001600160e01b0319811663a6c3bf3360e01b145b15611347576111bc866132f0565b6001600160e01b031981166388ec79fb60e01b14156114ce57611368613a68565b611370613a68565b60608061138a60048b518c6131479092919063ffffffff16565b80602001905161139d91908101906149ff565b604080516002808252606082019092529498509296509094509250816020015b6113c5613a68565b8152602001906001900390816113bd57905050975083886000815181106113e857fe5b6020026020010181905250828860018151811061140157fe5b602090810291909101015260408051600280825260608201909252908160200160208202803883390190505096508360a001518760008151811061144157fe5b6020026020010181815250508260a001518760018151811061145f57fe5b60209081029190910101526040805160028082526060820190925290816020015b606081526020019060019003908161148057905050955081866000815181106114a557fe5b602002602001018190525080866001815181106114be57fe5b6020026020010181905250505050505b509193509193565b6000806114e583610772613364565b82516114fb90849060049063ffffffff61302e16565b8060200190516109609190810190614828565b6000611518613afb565b6115a98584600560009054906101000a90046001600160a01b03166001600160a01b0316631ce4c78b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561156b57600080fd5b505afa15801561157f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115a39190810190614b60565b3a61336e565b60408051600280825260608281019093529293509091816020015b60608152602001906001900390816115c457505060408051600280825260608083018452939450909160208301908038833950506040805160028082526060808301845294955090925090602083019080388339505060408051600280825260608083018452949550909250906020830190803883390190505090508861014001518460008151811061165357fe5b602002602001018190525088600001518360008151811061167057fe5b60200260200101906001600160a01b031690816001600160a01b031681525050878260008151811061169e57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508460000151816000815181106116d057fe5b602002602001018181525050886101800151846001815181106116ef57fe5b602002602001018190525088600001518360018151811061170c57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505088604001518260018151811061173e57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505084604001518160018151811061177057fe5b602002602001018181525050611788848484846133e5565b9998505050505050505050565b60006117ec846117e76040518060400160405280600b81526020016a0c1e08141c9bdd1bd8dbdb60aa1b815250604051806040016040528060058152602001640332e302e360dc1b815250878761358a565b6135e1565b949350505050565b600080611803836107726135f5565b825161181990849060049063ffffffff61302e16565b806020019051610960919081019061414f565b60008061183f838263ffffffff61307116565b90506001600160e01b03198116630f47261b60e41b141561195857600061186d84601063ffffffff6130a516565b6040519091506060906370a0823160e01b9061188d908890602401614f15565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060836001600160a01b0316836040516118de9190614ef9565b600060405180830381855afa9150503d8060008114611919576040519150601f19603f3d011682016040523d82523d6000602084013e61191e565b606091505b5091509150818015611931575080516020145b61193c57600061194d565b61194d81600063ffffffff6130d816565b955050505050611da8565b6001600160e01b0319811663012b8bc960e11b1415611a975760008061197d856107bf565b6040519194509250606091506331a9108f60e11b906119a09084906024016151f4565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060846001600160a01b0316836040516119f19190614ef9565b600060405180830381855afa9150503d8060008114611a2c576040519150601f19603f3d011682016040523d82523d6000602084013e611a31565b606091505b50915091506000828015611a46575081516020145b611a51576000611a62565b611a6282600c63ffffffff6130a516565b9050896001600160a01b0316816001600160a01b031614611a84576000611a87565b60015b60ff169750505050505050611da8565b6001600160e01b0319811663a7cb5fb760e01b1415611c1e576000606080611abe86611e6d565b5081519296509094509250905060005b818114611c14578351606090627eeac760e11b908b90879085908110611af057fe5b6020026020010151604051602401611b09929190615025565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060876001600160a01b031683604051611b5a9190614ef9565b600060405180830381855afa9150503d8060008114611b95576040519150601f19603f3d011682016040523d82523d6000602084013e611b9a565b606091505b50915091506000828015611baf575081516020145b611bba576000611bcb565b611bcb82600063ffffffff6130d816565b90506000878681518110611bdb57fe5b60200260200101518281611beb57fe5b0490508b811080611bfa57508b155b15611c0357809b505b505060019093019250611ace915050565b5050505050611da8565b6001600160e01b0319811663619ce88560e11b1415611d0a57604051606090632a17967960e21b90611c5b908690600090819081906024016153ef565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925260045491519092506000916001600160a01b031690611cad908490614ef9565b600060405180830381855afa9150503d8060008114611ce8576040519150601f19603f3d011682016040523d82523d6000602084013e611ced565b606091505b5050905080611cfd576000611d01565b6000195b93505050611da8565b6001600160e01b031981166394cfcdd760e01b1415611da857606080611d2f8561216c565b80519194509250905060005b818114611da3576000611d6189858481518110611d5457fe5b602002602001015161182c565b90506000858381518110611d7157fe5b60200260200101518281611d8157fe5b04905087811080611d90575087155b15611d99578097505b5050600101611d3b565b505050505b5092915050565b600080611dc2838263ffffffff61307116565b91506001600160e01b03198216630f47261b60e41b14611df45760405162461bcd60e51b81526004016108059061566a565b611e0583601063ffffffff6130a516565b9050915091565b60008060006060611e1f85610772613600565b6000611e38600487518861302e9092919063ffffffff16565b806020019051611e4b9190810190614bdc565b91965094509250905060ff81166006811115611e6357fe5b9450509193509193565b60008060608080611e84868563ffffffff61307116565b94506001600160e01b0319851663a7cb5fb760e01b14611eb65760405162461bcd60e51b81526004016108059061566a565b505050506024828101516044840151606485015160848601519496929591820184019490820184019391010190565b60006117ec84611f376040518060400160405280600b81526020016a0c1e08141c9bdd1bd8dbdb60aa1b815250604051806040016040528060058152602001640332e302e360dc1b815250878761358a565b61360b565b6060808251604051908082528060200260200182016040528015611f6a578160200160208202803883390190505b50905060005b83518114611da857838181518110611f8457fe5b60200260200101516001600160a01b031631828281518110611fa257fe5b6020908102919091010152600101611f70565b606060008451905080604051908082528060200260200182016040528015611fe7578160200160208202803883390190505b50915060005b81811461206f5761203886828151811061200357fe5b602002602001015186838151811061201757fe5b602002602001015186848151811061202b57fe5b60200260200101516127e9565b83828151811061204457fe5b6020026020010190600481111561205757fe5b9081600481111561206457fe5b905250600101611fed565b50509392505050565b60405160609063012b8bc960e11b906120979085908590602401615025565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905092915050565b600060608060606120e48561077261361a565b84516120fa90869060049063ffffffff61302e16565b8060200190516109f89190810190614221565b60405160609063a7cb5fb760e01b90612130908790879087908790602401614f67565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050949350505050565b6000606080612181848463ffffffff61307116565b92506001600160e01b031983166394cfcdd760e01b146121b35760405162461bcd60e51b81526004016108059061566a565b83516121c990859060049063ffffffff61314716565b8060200190516121dc919081019061468f565b9395909450915050565b600060606121f683610772613625565b825161220c90849060049063ffffffff61302e16565b806020019051610960919081019061476b565b60065481565b60008060608161223b858263ffffffff61307116565b93506001600160e01b0319841663619ce88560e11b1461226d5760405162461bcd60e51b81526004016108059061566a565b845161228390869060049063ffffffff61314716565b80602001905161229691908101906141ca565b9597919650949350915050565b6000806122b283610772613630565b60006122cb600485518661302e9092919063ffffffff16565b8060200190516122de9190810190614b78565b9250905060ff81166001811115610a5557fe5b606060008251905080604051908082528060200260200182016040528015612323578160200160208202803883390190505b50915060005b818114610bd45761234085858381518110611d5457fe5b83828151811061234c57fe5b6020908102919091010152600101612329565b600080612372838263ffffffff61307116565b90506001600160e01b031981166394cfcdd760e01b141561240b576060806123998561216c565b80519194509250905060005b8181146124005760006123be89858481518110610ba857fe5b905060008583815181106123ce57fe5b602002602001015182816123de57fe5b049050878110806123ed575087155b156123f6578097505b50506001016123a5565b506108db9350505050565b6001600160e01b03198116630f47261b60e41b141561246457600061243784601063ffffffff6130a516565b600154604051919250606091636eb1769f60e11b9161188d9189916001600160a01b031690602401614f29565b6001600160e01b0319811663012b8bc960e11b141561269757600080612489856107bf565b6002546040519295509093506060925063e985e9c560e01b916124bc918a916001600160a01b0390911690602401614f29565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060846001600160a01b03168360405161250d9190614ef9565b600060405180830381855afa9150503d8060008114612548576040519150601f19603f3d011682016040523d82523d6000602084013e61254d565b606091505b509150915081158061256157508051602014155b8061257d575061257881600063ffffffff6130d816565b600114155b156126885760405160609063020604bf60e21b9061259f9087906024016151f4565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050856001600160a01b0316816040516125ec9190614ef9565b600060405180830381855afa9150503d8060008114612627576040519150601f19603f3d011682016040523d82523d6000602084013e61262c565b606091505b509093509150828015612640575081516020145b801561266f57506002546001600160a01b031661266483600c63ffffffff6130a516565b6001600160a01b0316145b61267a57600061267d565b60015b60ff16975050611c14565b60001996505050505050611da8565b6001600160e01b0319811663a7cb5fb760e01b14156127c55760006126bb84611e6d565b50506003546040519294506060935063e985e9c560e01b926126ec925089916001600160a01b031690602401614f29565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060836001600160a01b03168360405161273d9190614ef9565b600060405180830381855afa9150503d8060008114612778576040519150601f19603f3d011682016040523d82523d6000602084013e61277d565b606091505b5091509150818015612790575080516020145b80156127ac57506127a881600063ffffffff6130d816565b6001145b6127b757600061194d565b600019955050505050611da8565b6001600160e01b0319811663619ce88560e11b1415611da857506000199392505050565b60006127f3613afb565b6128468584600560009054906101000a90046001600160a01b03166001600160a01b0316631ce4c78b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561156b57600080fd5b60408051600480825260a0820190925291925060609190816020015b606081526020019060019003908161286257505060408051600480825260a082019092529192506060919060208201608080388339505060408051600480825260a08201909252929350606092915060208201608080388339505060408051600480825260a08201909252929350606092915060208201608080388339019050509050886101600151846000815181106128f857fe5b6020026020010181905250878360008151811061291157fe5b60200260200101906001600160a01b031690816001600160a01b03168152505088600001518260008151811061294357fe5b60200260200101906001600160a01b031690816001600160a01b031681525050868160008151811061297157fe5b6020026020010181815250508861014001518460018151811061299057fe5b60200260200101819052508860000151836001815181106129ad57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505087826001815181106129db57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050846000015181600181518110612a0d57fe5b602002602001018181525050886101a0015184600281518110612a2c57fe5b60200260200101819052508783600281518110612a4557fe5b60200260200101906001600160a01b031690816001600160a01b031681525050886040015182600281518110612a7757fe5b60200260200101906001600160a01b031690816001600160a01b031681525050846060015181600281518110612aa957fe5b60200260200101818152505088610180015184600381518110612ac857fe5b6020026020010181905250886000015183600381518110612ae557fe5b60200260200101906001600160a01b031690816001600160a01b031681525050886040015182600381518110612b1757fe5b60200260200101906001600160a01b031690816001600160a01b03168152505084604001518160038151811061177057fe5b6040516060906394cfcdd760e01b9061209790859085906024016151a1565b6000612b7a828263ffffffff61307116565b90506001600160e01b03198116630f47261b60e41b1480612bab57506001600160e01b0319811663012b8bc960e11b145b80612bc657506001600160e01b0319811663a7cb5fb760e01b145b80612be157506001600160e01b031981166394cfcdd760e01b145b80612bfc57506001600160e01b0319811663619ce88560e11b145b612c185760405162461bcd60e51b81526004016108059061566a565b919050565b606080606060008551905080604051908082528060200260200182016040528015612c6257816020015b612c4f613b2a565b815260200190600190039081612c475790505b50935080604051908082528060200260200182016040528015612c8f578160200160208202803883390190505b50925080604051908082528060200260200182016040528015612cbc578160200160208202803883390190505b50915060005b818114612d4c57612cf9878281518110612cd857fe5b6020026020010151878381518110612cec57fe5b6020026020010151612d6e565b8751889085908110612d0757fe5b60200260200101878581518110612d1a57fe5b60200260200101878681518110612d2d57fe5b9315156020948502919091019093019290925291905252600101612cc2565b50509250925092565b606080612d6284846122f1565b91506108538484610b59565b612d76613b2a565b600554604051639d3fa4b960e01b815260009182916001600160a01b0390911690639d3fa4b990612dab9088906004016156b6565b60606040518083038186803b158015612dc357600080fd5b505afa158015612dd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612dfb9190810190614883565b855160055460405163a12dcc6f60e01b815292955090916001600160a01b039091169063a12dcc6f90612e3490899089906004016156c9565b60206040518083038186803b158015612e4c57600080fd5b505afa158015612e60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612e8491908101906146e5565b91506000612e97828861014001516108b9565b60a088015160c08901516101808a01516101408b015193945091929091600091612ec69163ffffffff61363b16565b15612ef357612eec84612ee6848d6080015161366090919063ffffffff16565b8561367c565b9050612f4c565b81612f0757612eec848b608001518561367c565b6000612f18868c61018001516108b9565b90506000612f2b868d608001518761367c565b90506000612f3a83868861367c565b9050612f4682826130ef565b93505050505b612f6c612f6689604001518561369e90919063ffffffff16565b826130ef565b96506004612f7f8b8c602001518a61150e565b6004811115612f8a57fe5b14612f96576000612f98565b865b965050505050509250925092565b6000806000612fb7846107726136bd565b6000612fd0600486518761302e9092919063ffffffff16565b8060200190516108999190810190614ba5565b63fdb6ca8d60e01b90565b6000612ffb836000613071565b90506001600160e01b0319808216908316146130295760405162461bcd60e51b815260040161080590615644565b505050565b60608183111561304c5761304c613047600085856136c8565b6136e7565b83518211156130655761306561304760018487516136c8565b50819003910190815290565b600081600401835110156130925761309261304760038551856004016136c8565b5001602001516001600160e01b03191690565b600081601401835110156130c6576130c661304760048551856014016136c8565b5001601401516001600160a01b031690565b6000610c8883836136ef565b6318e4b14160e01b90565b60008183106130fe5781610c88565b5090919050565b634678472b60e01b90565b63b6555d6f60e01b90565b6324410cd360e11b90565b631b8388f760e01b90565b630e94a7ed60e41b90565b634ad3127560e01b90565b60608183111561316057613160613047600085856136c8565b83518211156131795761317961304760018487516136c8565b8282036040519080825280601f01601f1916602001820160405280156131a6576020820181803883390190505b509050610c886131b582613719565b846131bf87613719565b01835161371f565b60608060606131e360048551866131479092919063ffffffff16565b80602001905161091b9190810190614590565b60408051600180825281830190925260609182918291816020015b613219613a68565b8152602001906001900390816132115750506040805160018082528183019092529194506020808301908038833901905050604080516001808252818301909252919350816020015b6060815260200190600190039081613262575050845190915061328f90859060049063ffffffff61314716565b8060200190516132a29190810190614a57565b856000815181106132af57fe5b60200260200101856000815181106132c357fe5b60200260200101856000815181106132d757fe5b6020908102919091010192909252919052529193909250565b60408051600180825281830190925260609182918291602080830190803883395050855191935061332c9186915060049063ffffffff61314716565b80602001905161333f9190810190614609565b8451859060009061334c57fe5b60209081029190910101919091529095929450925050565b628e3db960e51b90565b613376613afb565b6020810184905260a085015160808601516133929186916137c4565b815260a085015160c08601516133a99186916137c4565b604082015260a085015160e08601516133c39186916137c4565b60608201526133d8828463ffffffff6137f816565b6080820152949350505050565b60405160009060609063b04fbddd60e01b9061340b90889088908890889060240161503e565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925260055491519092506060916001600160a01b03169061345d908490614ef9565b6000604051808303816000865af19150503d806000811461349a576040519150601f19603f3d011682016040523d82523d6000602084013e61349f565b606091505b509150600090506134b6828263ffffffff61307116565b90506134c061311b565b6001600160e01b0319828116911614156134fd5760006134df8361096a565b5091505060ff811660048111156134f257fe5b9450505050506117ec565b613505613105565b6001600160e01b031982811691161415613538576000613524836108e1565b509091505060ff811660048111156134f257fe5b815160208301207ff43f26ea5a94b478394a975e856464913dc1a8a1ca70939d974aa7c238aa0ce0141561357257600493505050506117ec565b60405162461bcd60e51b8152600401610805906155b9565b8351602094850120835193850193909320604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f815295860194909452928401929092526060830152608082015260a0902090565b6000610c88826135f085613829565b6138a4565b6350ae068360e11b90565b630fcb446360e31b90565b6000610c88826135f0856138c3565b635bd0428d60e01b90565b6320d11f6160e01b90565b633d66146160e21b90565b600081518351148015610c885750508051602091820120825192909101919091201490565b600082820183811015610c8857610c886130476000868661397c565b60006117ec83613692868563ffffffff6137f816565b9063ffffffff61399b16565b6000828211156136b7576136b76130476002858561397c565b50900390565b631ca78ed960e31b90565b6060632800659560e01b848484604051602401610c53939291906154c4565b805160208201fd5b600081602001835110156137105761371061304760058551856020016136c8565b50016020015190565b60200190565b6020811015613749576001816020036101000a038019835116818551168082178652505050613029565b8282141561375657613029565b828211156137905760208103905080820181840181515b8285101561378857845186526020958601959094019361376d565b905250613029565b60208103905080820181840183515b818612156137bb5782518252601f19928301929091019061379f565b85525050505050565b60006137d18484846139c5565b156137e4576137e4613047858585613a2b565b6117ec83613692868563ffffffff6137f816565b600082613807575060006108db565b8282028284828161381457fe5b0414610c8857610c886130476001868661397c565b608081810151825160208085015160408087015160609788015186519685019690962082517fec69816980a3a3ca4554410e60253953e9ff375ba4536a98adfa15cc7154150881529485019590955290830191909152948101949094526001600160a01b039091169183019190915260a082015260c0902090565b60405161190160f01b8152600281019290925260228201526042902090565b6101408101516101608201516101808301516101a08401516000937ff80322eb8376aafb64eadf8f0d7623f22130fd9491a221e902b713cb984a75349390929091602087101561390f57fe5b601f1987018051610140890180516101608b0180516101808d0180516101a08f0180519d89528c5160209d8e012087528b519b8d019b909b2084528951998c01999099208152875197909a019690962088526101e085209390945290529190529252919091529050919050565b606063e946c1bb60e01b848484604051602401610c5393929190615455565b6000816139b1576139b16130476003858561397c565b60008284816139bc57fe5b04949350505050565b6000826139d7576139d7613047613a4a565b8115806139e2575083155b156139ef57506000610c88565b600083806139f957fe5b8584099050613a0e858463ffffffff6137f816565b613a20826103e863ffffffff6137f816565b101595945050505050565b606063339f3de260e01b848484604051602401610c53939291906156ee565b60408051808201909152600481526329e460df60e21b602082015290565b604051806101c0016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001606081525090565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b80356108db816157c7565b80516108db816157c7565b600082601f830112613b70578081fd5b8135613b83613b7e8261572a565b615704565b818152915060208083019084810181840286018201871015613ba457600080fd5b60005b84811015611da3578135613bba816157c7565b84529282019290820190600101613ba7565b600082601f830112613bdc578081fd5b8151613bea613b7e8261572a565b8181529150602080830190840160005b83811015613c2757613c128760208451890101613e4c565b83526020928301929190910190600101613bfa565b5050505092915050565b600082601f830112613c41578081fd5b8135613c4f613b7e8261572a565b8181529150602080830190840160005b83811015613c2757613c778760208435890101613dfe565b83526020928301929190910190600101613c5f565b600082601f830112613c9c578081fd5b8151613caa613b7e8261572a565b8181529150602080830190840160005b83811015613c2757613cd28760208451890101613fe0565b83526020928301929190910190600101613cba565b600082601f830112613cf7578081fd5b8135613d05613b7e8261572a565b8181529150602080830190840160005b83811015613c2757613d2d8760208435890101613e92565b83526020928301929190910190600101613d15565b600082601f830112613d52578081fd5b8151613d60613b7e8261572a565b818152915060208083019084810181840286018201871015613d8157600080fd5b60005b84811015611da357815184529282019290820190600101613d84565b600082601f830112613db0578081fd5b8135613dbe613b7e8261572a565b818152915060208083019084810181840286018201871015613ddf57600080fd5b60005b84811015611da357813584529282019290820190600101613de2565b600082601f830112613e0e578081fd5b8135613e1c613b7e82615749565b9150808252836020828501011115613e3357600080fd5b8060208401602084013760009082016020015292915050565b600082601f830112613e5c578081fd5b8151613e6a613b7e82615749565b9150808252836020828501011115613e8157600080fd5b611da881602084016020860161576c565b60006101c0808385031215613ea5578182fd5b613eae81615704565b915050613ebb8383613b4a565b8152613eca8360208401613b4a565b6020820152613edc8360408401613b4a565b6040820152613eee8360608401613b4a565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e0820152610100808301358183015250610120808301358183015250610140808301356001600160401b0380821115613f4f57600080fd5b613f5b86838701613dfe565b83850152610160925082850135915080821115613f7757600080fd5b613f8386838701613dfe565b83850152610180925082850135915080821115613f9f57600080fd5b613fab86838701613dfe565b838501526101a0925082850135915080821115613fc757600080fd5b50613fd485828601613dfe565b82840152505092915050565b60006101c0808385031215613ff3578182fd5b613ffc81615704565b9150506140098383613b55565b81526140188360208401613b55565b602082015261402a8360408401613b55565b604082015261403c8360608401613b55565b60608201526080820151608082015260a082015160a082015260c082015160c082015260e082015160e0820152610100808301518183015250610120808301518183015250610140808301516001600160401b038082111561409d57600080fd5b6140a986838701613e4c565b838501526101609250828501519150808211156140c557600080fd5b6140d186838701613e4c565b838501526101809250828501519150808211156140ed57600080fd5b6140f986838701613e4c565b838501526101a092508285015191508082111561411557600080fd5b50613fd485828601613e4c565b805160ff811681146108db57600080fd5b600060208284031215614144578081fd5b8135610c88816157c7565b60008060408385031215614161578081fd5b825161416c816157c7565b602084015190925061417d816157c7565b809150509250929050565b60008060006060848603121561419c578081fd5b83516141a7816157c7565b60208501519093506141b8816157c7565b80925050604084015190509250925092565b6000806000606084860312156141de578081fd5b83516141e9816157c7565b60208501519093506001600160401b03811115614204578182fd5b61421086828701613e4c565b925050604084015190509250925092565b60008060008060808587031215614236578182fd5b8451614241816157c7565b60208601519094506001600160401b038082111561425d578384fd5b61426988838901613e4c565b9450604087015191508082111561427e578384fd5b61428a88838901613e4c565b9350606087015191508082111561429f578283fd5b506142ac87828801613e4c565b91505092959194509250565b600080604083850312156142ca578182fd5b82356142d5816157c7565b915060208301356001600160401b038111156142ef578182fd5b6142fb85828601613c31565b9150509250929050565b6000806000806080858703121561431a578182fd5b8435614325816157c7565b935060208501356001600160401b0380821115614340578384fd5b61434c88838901613da0565b94506040870135915080821115614361578384fd5b61436d88838901613da0565b93506060870135915080821115614382578283fd5b506142ac87828801613dfe565b600080604083850312156143a1578182fd5b82356143ac816157c7565b915060208301356001600160401b038111156143c6578182fd5b6142fb85828601613dfe565b6000806000606084860312156143e6578081fd5b83356143f1816157c7565b925060208401356001600160401b0381111561440b578182fd5b61441786828701613dfe565b925050604084013590509250925092565b6000806040838503121561443a578182fd5b8235614445816157c7565b946020939093013593505050565b600060208284031215614464578081fd5b81356001600160401b03811115614479578182fd5b6117ec84828501613b60565b600060208284031215614496578081fd5b81516001600160401b038111156144ab578182fd5b6117ec84828501613c8c565b6000806000606084860312156144cb578081fd5b83356001600160401b03808211156144e1578283fd5b6144ed87838801613ce7565b94506020860135915080821115614502578283fd5b61450e87838801613b60565b93506040860135915080821115614523578283fd5b5061453086828701613da0565b9150509250925092565b6000806040838503121561454c578182fd5b82356001600160401b0380821115614562578384fd5b61456e86838701613ce7565b93506020850135915080821115614583578283fd5b506142fb85828601613c31565b6000806000606084860312156145a4578081fd5b83516001600160401b03808211156145ba578283fd5b6145c687838801613c8c565b945060208601519150808211156145db578283fd5b6145e787838801613d42565b935060408601519150808211156145fc578283fd5b5061453086828701613bcc565b60008060006060848603121561461d578081fd5b83516001600160401b0380821115614633578283fd5b61463f87838801613c8c565b94506020860151935060408601519150808211156145fc578283fd5b6000806040838503121561466d578182fd5b82356001600160401b0380821115614683578384fd5b61456e86838701613da0565b600080604083850312156146a1578182fd5b82516001600160401b03808211156146b7578384fd5b6146c386838701613d42565b935060208501519150808211156146d8578283fd5b506142fb85828601613bcc565b6000602082840312156146f6578081fd5b81518015158114610c88578182fd5b6000806000806080858703121561471a578182fd5b84519350602085015161472c816157c7565b60408601519093506001600160401b038082111561427e578384fd5b6000806040838503121561475a578182fd5b505080516020909101519092909150565b6000806040838503121561477d578182fd5b8251915060208301516001600160401b03811115614799578182fd5b6142fb85828601613e4c565b6000806000606084860312156147b9578081fd5b8351925060208401516001600160401b03808211156147d6578283fd5b6147e287838801613e4c565b935060408601519150808211156147f7578283fd5b5061453086828701613e4c565b60008060408385031215614816578182fd5b82519150602083015161417d816157dc565b6000806040838503121561483a578182fd5b82516001600160e01b03198116811461416c578283fd5b600060208284031215614862578081fd5b81356001600160401b03811115614877578182fd5b6117ec84828501613dfe565b600060608284031215614894578081fd5b61489e6060615704565b6148a88484614122565b815260208301516020820152604083015160408201528091505092915050565b6000602082840312156148d9578081fd5b81516001600160401b038111156148ee578182fd5b6117ec84828501613fe0565b60008060006060848603121561490e578081fd5b83356001600160401b03811115614923578182fd5b61492f86828701613e92565b9350506020840135614940816157c7565b929592945050506040919091013590565b60008060408385031215614963578182fd5b82356001600160401b0380821115614979578384fd5b61498586838701613e92565b9350602085013591508082111561499a578283fd5b506142fb85828601613dfe565b6000806000606084860312156149bb578081fd5b83356001600160401b038111156149d0578182fd5b6149dc86828701613e92565b9350506020840135915060408401356149f4816157c7565b809150509250925092565b60008060008060808587031215614a14578182fd5b84516001600160401b0380821115614a2a578384fd5b614a3688838901613fe0565b95506020870151915080821115614a4b578384fd5b61426988838901613fe0565b600080600060608486031215614a6b578081fd5b83516001600160401b0380821115614a81578283fd5b614a8d87838801613fe0565b94506020860151935060408601519150808211156147f7578283fd5b600080600060608486031215614abd578081fd5b83356001600160401b0380821115614ad3578283fd5b81860160a08189031215614ae5578384fd5b614aef60a0615704565b9250803583526020810135602084015260408101356040840152614b168860608301613b4a565b6060840152608081013582811115614b2c578485fd5b614b3889828401613dfe565b608085015250919450505060208401359150614b578560408601613b4a565b90509250925092565b600060208284031215614b71578081fd5b5051919050565b60008060408385031215614b8a578182fd5b8251614b95816157dc565b6020939093015192949293505050565b600080600060608486031215614bb9578081fd5b8351614bc4816157dc565b6020850151604086015191945092506149f4816157c7565b60008060008060808587031215614bf1578182fd5b614bfb8686614122565b9350602085015192506040850151614c12816157c7565b60608601519092506001600160401b03811115614c2d578182fd5b6142ac87828801613e4c565b600080600060608486031215614c4d578081fd5b614c578585614122565b92506020840151915060408401516001600160401b03811115614c78578182fd5b61453086828701613e4c565b600080600060608486031215614c98578081fd5b614ca28585614122565b925060208401519150604084015190509250925092565b1515815260200190565b6000614ccf8383614ddc565b505060600190565b6001600160a01b03169052565b6000815180845260208401935060208301825b82811015614d1e5781516001600160a01b0316865260209586019590910190600101614cf7565b5093949350505050565b600081518084526020840180819550602083028101915060208501845b84811015614d73578284038852614d5d848351614db0565b6020988901989094509190910190600101614d45565b50919695505050505050565b6000815180845260208401935060208301825b82811015614d1e578151865260209586019590910190600101614d92565b60008151808452614dc881602086016020860161576c565b601f01601f19169290920160200192915050565b805160ff16825260208082015190830152604090810151910152565b60006101c0614e08848451614cd7565b6020830151614e1a6020860182614cd7565b506040830151614e2d6040860182614cd7565b506060830151614e406060860182614cd7565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e0850152610100808401518186015250610120808401518186015250610140808401518282870152614e9983870182614db0565b91505061016091508184015185820383870152614eb68282614db0565b925050506101808084015185830382870152614ed28382614db0565b9150506101a091508184015185820383870152614eef8282614db0565b9695505050505050565b60008251614f0b81846020870161576c565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0385168152608060208201819052600090614f8b90830186614d7f565b8281036040840152614f9d8186614d7f565b8381036060850152614faf8186614db0565b98975050505050505050565b6001600160a01b0384168152606060208201819052600090614fdf90830185614db0565b9050826040830152949350505050565b6001600160a01b038516815260806020820181905260009061501390830186614db0565b8281036040840152614f9d8186614db0565b6001600160a01b03929092168252602082015260400190565b6000608082526150516080830187614d28565b82810360208401526150638187614ce4565b83810360408501526150758187614ce4565b915050828103606084015261508a8185614d7f565b979650505050505050565b602080825282518282018190526000918401906040840190835b818110156150d7578351600581106150c357fe5b8352602093840193909201916001016150af565b509095945050505050565b600060608201606083528086516150f981846151f4565b9150602088019250835b8181101561512757615116838551614cc3565b602094909401939250600101615103565b5050838103602085015261513b8187614d7f565b915050828103604084015280845161515381846151f4565b9150602086019250835b8181101561518157615170838551614cb9565b60209490940193925060010161515d565b5090979650505050505050565b600060208252610c886020830184614d7f565b6000604082526151b46040830185614d7f565b82810360208401526151c68185614d28565b95945050505050565b6000604082526151e26040830185614d7f565b82810360208401526151c68185614d7f565b90815260200190565b8481526001600160a01b038416602082015260806040820181905260009061522790830185614db0565b828103606084015261508a8185614db0565b918252602082015260400190565b6000838252604060208301526117ec6040830184614db0565b6000848252606060208301526152796060830185614db0565b8281036040840152614eef8185614db0565b8281526040810161529b836157bd565b8260208301529392505050565b6001600160e01b031991909116815260200190565b6001600160e01b03199290921682526001600160a01b0316602082015260400190565b6001600160e01b0319861681526001600160a01b038516602082015260a06040820181905260009061531490830186614d7f565b82810360608401526153268186614d7f565b83810360808501526117888186614db0565b6001600160e01b0319851681526001600160a01b038416602082015260806040820181905260009061536c90830185614db0565b905082606083015295945050505050565b6001600160e01b03199390931683526001600160a01b03919091166020830152604082015260600190565b600063ffffffff60e01b85168252606060208301526153ca6060830185614d7f565b8281036040840152614eef8185614d28565b600060208252610c886020830184614db0565b6000608082526154026080830187614db0565b6001600160a01b03958616602084015293909416604082015260ff9190911660609091015292915050565b60006154388561579c565b848252836020830152606060408301526151c66060830184614db0565b60608101615462856157a9565b938152602081019290925260409091015290565b60608101615483856157b3565b93815260208101929092526001600160a01b031660409091015290565b604081016154ad846157a9565b9281526020015290565b60608101615462856157b3565b606081016008851061546257fe5b60208101600583106154e057fe5b91905290565b60006154f1866157bd565b858252602082018590526001600160a01b0384166040830152608060608301819052614eef90830184614db0565b604081016154ad8461579c565b60006080825261553f6080830187614db0565b602083820381850152818751808452828401915082838202850101838a01865b8381101561558d57601f1987840301855261557b838351614df8565b9486019492509085019060010161555f565b505086810360408801526155a1818a614d7f565b945050505050828103606084015261508a8185614d28565b602080825260139082015272554e4b4e4f574e5f52455455524e5f4441544160681b604082015260600190565b60208082526019908201527f554e4b4e4f574e5f46554e4354494f4e5f53454c4543544f5200000000000000604082015260600190565b6020808252600d908201526c15539253541311535153951151609a1b604082015260600190565b6020808252600c908201526b2120a22fa9a2a622a1aa27a960a11b604082015260600190565b6020808252600e908201526d15d493d391d7d41493d61657d25160921b604082015260600190565b60a081016156a08286614ddc565b8360608301528215156080830152949350505050565b600060208252610c886020830184614df8565b6000604082526156dc6040830185614df8565b82810360208401526151c68185614db0565b9283526020830191909152604082015260600190565b6040518181016001600160401b038111828210171561572257600080fd5b604052919050565b60006001600160401b0382111561573f578081fd5b5060209081020190565b60006001600160401b0382111561575e578081fd5b50601f01601f191660200190565b60005b8381101561578757818101518382015260200161576f565b83811115615796576000848401525b50505050565b600281106157a657fe5b50565b600481106157a657fe5b600381106157a657fe5b600781106157a657fe5b6001600160a01b03811681146157a657600080fd5b60ff811681146157a657600080fdfea365627a7a723158204793664dee66dcabc4a710b9901a17d347a2ff1fb84df266b96a650f614b87756c6578706572696d656e74616cf564736f6c634300050f0040'; + '0x608060405234801561001057600080fd5b50600436106102745760003560e01c80639a7e752611610151578063ca49f47c116100c3578063d3d862d111610087578063d3d862d1146106a9578063d4695028146106bc578063e25cabf7146106dc578063e4e6e7da146106fe578063e77286eb1461071f578063ee4f5a941461074157610274565b8063ca49f47c1461062c578063cafd3a071461064f578063d001c5dc14610670578063d186037f14610683578063d36379051461069657610274565b8063a6627e9f11610115578063a6627e9f14610598578063acaedc74146105ab578063b43cffe1146105ce578063bbb2dcf6146105e1578063bc03f96414610603578063c26cfecd1461062457610274565b80639a7e75261461050b5780639eadc8351461052e578063a070cac814610552578063a0901e5114610565578063a5cd62ba1461057857610274565b80634dfdac20116101ea5780637914b2ec116101ae5780637914b2ec146104705780637982653e1461049157806379c9c426146104b15780637b66ad34146104c45780637d727512146104e55780638f4ce479146104f857610274565b80634dfdac20146103d8578063590aa875146103f857806363eb399214610418578063651290421461042b5780636f83188e1461044d57610274565b8063314853ff1161023c578063314853ff14610328578063327d30541461034a57806332aae3ad1461035d5780633db6dc611461037f578063459be5e2146103a257806346eb65cb146103c357610274565b806302d0aec31461027957806304a5618a146102a35780630d7b7d76146102c5578063165979e1146102e65780632322cf7614610308575b600080fd5b61028c610287366004614853565b610763565b60405161029a929190615296565b60405180910390f35b6102b66102b1366004614853565b6107bf565b60405161029a93929190615388565b6102d86102d3366004614391565b61083a565b60405161029a929190615244565b6102f96102f4366004614853565b61085c565b60405161029a939291906154c2565b61031b610316366004614391565b6108b9565b60405161029a91906151ff565b61033b610336366004614853565b6108e1565b60405161029a9392919061526b565b6102d8610358366004614853565b610928565b61037061036b366004614853565b61096a565b60405161029a93929190615438565b61039261038d366004614853565b6109bd565b60405161029a9493929190615208565b6103b56103b0366004614853565b610a07565b60405161029a9291906154ab565b6103d66103d1366004614853565b610a5d565b005b6103eb6103e63660046142ba565b610b59565b60405161029a9190615199565b61040b610406366004614135565b610bdc565b60405161029a91906153e7565b61040b6104263660046143d4565b610c32565b61043e610439366004614853565b610c8f565b60405161029a93929190614f4e565b61046061045b366004614853565b610cc9565b60405161029a9493929190615537565b61048361047e366004614853565b6114d6565b60405161029a9291906152c8565b6104a461049f3660046148ff565b61150e565b60405161029a91906154dd565b61031b6104bf366004614aae565b611795565b6104d76104d2366004614853565b6117f4565b60405161029a929190614f34565b61031b6104f3366004614391565b61182c565b610483610506366004614853565b611daf565b61051e610519366004614853565b611e0c565b60405161029a94939291906154f1565b61054161053c366004614853565b611e6d565b60405161029a9594939291906152eb565b61031b6105603660046149ac565b611ee5565b6103eb610573366004614455565b611f3c565b61058b6105863660046144b9565b611fb5565b60405161029a91906150a0565b61040b6105a636600461442a565b612078565b6105be6105b9366004614853565b6120d1565b60405161029a9493929190614ffa565b61040b6105dc366004614307565b61210d565b6105f46105ef366004614853565b61216c565b60405161029a939291906153b3565b610616610611366004614853565b6121e6565b60405161029a929190615252565b61031b61221f565b61063f61063a366004614853565b612225565b60405161029a9493929190615343565b61066261065d366004614853565b6122a3565b60405161029a92919061552a565b6103eb61067e3660046142ba565b6122f1565b61031b610691366004614391565b61235f565b6104a46106a43660046148ff565b6127e9565b61040b6106b736600461465d565b612b49565b6106cf6106ca366004614853565b612b68565b60405161029a91906152b3565b6106ef6106ea36600461453c565b612c1d565b60405161029a939291906150ed565b61071161070c3660046142ba565b612d55565b60405161029a9291906151da565b61073261072d366004614956565b612d6e565b60405161029a9392919061569d565b61075461074f366004614853565b612fa6565b60405161029a93929190615481565b60008061077783610772612fe3565b612fee565b6000610790600485518661302e9092919063ffffffff16565b8060200190516107a39190810190614806565b909350905060ff811660068111156107b757fe5b915050915091565b600080806107d3848263ffffffff61307116565b92506001600160e01b0319831663012b8bc960e11b1461080e5760405162461bcd60e51b815260040161080590615675565b60405180910390fd5b61081f84601063ffffffff6130a516565b915061083284602463ffffffff6130d816565b929491935050565b600080610847848461182c565b9150610853848461235f565b90509250929050565b600080600061086d846107726130e4565b6000610886600486518761302e9092919063ffffffff16565b8060200190516108999190810190614c89565b9094509250905060ff811660028111156108af57fe5b9350509193909250565b60008060006108c8858561083a565b915091506108d682826130ef565b925050505b92915050565b60006060806108f284610772613105565b835161090890859060049063ffffffff61302e16565b80602001905161091b91908101906147a7565b9196909550909350915050565b60008061093783610772613110565b825161094d90849060049063ffffffff61302e16565b806020019051610960919081019061474a565b9094909350915050565b600080606061097b8461077261311b565b6000610994600486518761302e9092919063ffffffff16565b8060200190516109a79190810190614c3e565b9094509250905060ff811660018111156108af57fe5b6000806060806109cf85610772613126565b84516109e590869060049063ffffffff61302e16565b8060200190516109f89190810190614707565b92989197509550909350915050565b600080610a1683610772613131565b6000610a2f600485518661302e9092919063ffffffff16565b806020019051610a429190810190614b7d565b9250905060ff81166003811115610a5557fe5b925050915091565b6000610a6f828263ffffffff61307116565b90506001600160e01b03198116630f47261b60e41b1415610a9a57610a9382611daf565b5050610b55565b6001600160e01b0319811663012b8bc960e11b1415610ac457610abc826107bf565b505050610b55565b6001600160e01b0319811663a7cb5fb760e01b1415610af057610ae682611e6d565b5050505050610b55565b6001600160e01b031981166394cfcdd760e01b1415610b1257610abc8261216c565b6001600160e01b0319811663619ce88560e11b1415610b3d57610b3482612225565b50505050610b55565b60405162461bcd60e51b815260040161080590615675565b5050565b606060008251905080604051908082528060200260200182016040528015610b8b578160200160208202803883390190505b50915060005b818114610bd457610bb585858381518110610ba857fe5b602002602001015161235f565b838281518110610bc157fe5b6020908102919091010152600101610b91565b505092915050565b604051606090630f47261b60e41b90610bf9908490602401614f20565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050919050565b60405160609063619ce88560e11b90610c5390869086908690602401614fc6565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915290505b9392505050565b6000806000610ca08461077261313c565b8351610cb690859060049063ffffffff61302e16565b80602001905161091b919081019061418a565b60608080806000610ce0868263ffffffff61307116565b90506001600160e01b0319811663dedfc1f160e01b1415610d2c5760405180604001604052806011815260200170626174636843616e63656c4f726465727360781b81525094506110d8565b6001600160e01b03198116634b4a520160e11b1415610d74576040518060400160405280600f81526020016e626174636846696c6c4f726465727360881b81525094506110d8565b6001600160e01b031981166323aa37f960e21b1415610dc35760405180604001604052806016815260200175626174636846696c6c4f72646572734e6f5468726f7760501b81525094506110d8565b6001600160e01b03198116632fbb8b8560e21b1415610e115760405180604001604052806015815260200174626174636846696c6c4f724b696c6c4f726465727360581b81525094506110d8565b6001600160e01b03198116632da6298760e01b1415610e55576040518060400160405280600b81526020016a31b0b731b2b627b93232b960a91b81525094506110d8565b6001600160e01b03198116634da26aab60e11b1415610e9757604051806040016040528060098152602001683334b63627b93232b960b91b81525094506110d8565b6001600160e01b03198116633852d63160e21b1415610edf576040518060400160405280600f81526020016e3334b63627b925b4b63627b93232b960891b81525094506110d8565b6001600160e01b031981166378d29ac160e01b1415610f2e57604051806040016040528060168152602001756d61726b65744275794f72646572734e6f5468726f7760501b81525094506110d8565b6001600160e01b0319811663369da09960e01b1415610f84576040518060400160405280601781526020017f6d61726b657453656c6c4f72646572734e6f5468726f7700000000000000000081525094506110d8565b6001600160e01b03198116638bc8efb360e01b1415610fda576040518060400160405280601981526020017f6d61726b65744275794f726465727346696c6c4f724b696c6c0000000000000081525094506110d8565b6001600160e01b0319811663a6c3bf3360e01b1415611030576040518060400160405280601a81526020017f6d61726b657453656c6c4f726465727346696c6c4f724b696c6c00000000000081525094506110d8565b6001600160e01b031981166388ec79fb60e01b1415611074576040518060400160405280600b81526020016a6d617463684f726465727360a81b81525094506110d8565b6001600160e01b03198116634f9559b160e01b14806110a357506001600160e01b031981166302280c9160e41b145b156110c05760405162461bcd60e51b815260040161080590615628565b60405162461bcd60e51b8152600401610805906155f1565b6001600160e01b0319811663dedfc1f160e01b141561116457855161110790879060049063ffffffff61314716565b80602001905161111a9190810190614487565b604080516000808252602082019092529195505b506040805160008082526020820190925291945061115c565b60608152602001906001900390816111475790505b5091506114ce565b6001600160e01b03198116632fbb8b8560e21b148061119357506001600160e01b03198116634b4a520160e11b145b806111ae57506001600160e01b031981166323aa37f960e21b145b156111c8576111bc866131c7565b919550935091506114ce565b6001600160e01b03198116632da6298760e01b14156112975760408051600180825281830190925290816020015b6111fe613a68565b8152602001906001900390816111f6575050865190945061122990879060049063ffffffff61314716565b80602001905161123c91908101906148cd565b8460008151811061124957fe5b6020026020010181905250600060405190808252806020026020018201604052801561112e57816020016020820280388339019050506040805160008082526020820190925291945061115c565b6001600160e01b03198116633852d63160e21b14806112c657506001600160e01b03198116634da26aab60e11b145b156112d4576111bc866131f6565b6001600160e01b031981166378d29ac160e01b148061130357506001600160e01b0319811663369da09960e01b145b8061131e57506001600160e01b03198116638bc8efb360e01b145b8061133957506001600160e01b0319811663a6c3bf3360e01b145b15611347576111bc866132f0565b6001600160e01b031981166388ec79fb60e01b14156114ce57611368613a68565b611370613a68565b60608061138a60048b518c6131479092919063ffffffff16565b80602001905161139d9190810190614a04565b604080516002808252606082019092529498509296509094509250816020015b6113c5613a68565b8152602001906001900390816113bd57905050975083886000815181106113e857fe5b6020026020010181905250828860018151811061140157fe5b602090810291909101015260408051600280825260608201909252908160200160208202803883390190505096508360a001518760008151811061144157fe5b6020026020010181815250508260a001518760018151811061145f57fe5b60209081029190910101526040805160028082526060820190925290816020015b606081526020019060019003908161148057905050955081866000815181106114a557fe5b602002602001018190525080866001815181106114be57fe5b6020026020010181905250505050505b509193509193565b6000806114e583610772613364565b82516114fb90849060049063ffffffff61302e16565b806020019051610960919081019061482a565b6000611518613afb565b6115a98584600560009054906101000a90046001600160a01b03166001600160a01b0316631ce4c78b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561156b57600080fd5b505afa15801561157f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115a39190810190614b65565b3a61336e565b60408051600280825260608281019093529293509091816020015b60608152602001906001900390816115c457505060408051600280825260608083018452939450909160208301908038833950506040805160028082526060808301845294955090925090602083019080388339505060408051600280825260608083018452949550909250906020830190803883390190505090508861014001518460008151811061165357fe5b602002602001018190525088600001518360008151811061167057fe5b60200260200101906001600160a01b031690816001600160a01b031681525050878260008151811061169e57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508460000151816000815181106116d057fe5b602002602001018181525050886101800151846001815181106116ef57fe5b602002602001018190525088600001518360018151811061170c57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505088604001518260018151811061173e57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505084604001518160018151811061177057fe5b602002602001018181525050611788848484846133e5565b9998505050505050505050565b60006117ec846117e76040518060400160405280600b81526020016a0c1e08141c9bdd1bd8dbdb60aa1b815250604051806040016040528060058152602001640332e302e360dc1b815250878761358a565b6135e1565b949350505050565b600080611803836107726135f5565b825161181990849060049063ffffffff61302e16565b8060200190516109609190810190614151565b60008061183f838263ffffffff61307116565b90506001600160e01b03198116630f47261b60e41b141561195857600061186d84601063ffffffff6130a516565b6040519091506060906370a0823160e01b9061188d908890602401614f20565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060836001600160a01b0316836040516118de9190614f04565b600060405180830381855afa9150503d8060008114611919576040519150601f19603f3d011682016040523d82523d6000602084013e61191e565b606091505b5091509150818015611931575080516020145b61193c57600061194d565b61194d81600063ffffffff6130d816565b955050505050611da8565b6001600160e01b0319811663012b8bc960e11b1415611a975760008061197d856107bf565b6040519194509250606091506331a9108f60e11b906119a09084906024016151ff565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060846001600160a01b0316836040516119f19190614f04565b600060405180830381855afa9150503d8060008114611a2c576040519150601f19603f3d011682016040523d82523d6000602084013e611a31565b606091505b50915091506000828015611a46575081516020145b611a51576000611a62565b611a6282600c63ffffffff6130a516565b9050896001600160a01b0316816001600160a01b031614611a84576000611a87565b60015b60ff169750505050505050611da8565b6001600160e01b0319811663a7cb5fb760e01b1415611c1e576000606080611abe86611e6d565b5081519296509094509250905060005b818114611c14578351606090627eeac760e11b908b90879085908110611af057fe5b6020026020010151604051602401611b09929190615030565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060876001600160a01b031683604051611b5a9190614f04565b600060405180830381855afa9150503d8060008114611b95576040519150601f19603f3d011682016040523d82523d6000602084013e611b9a565b606091505b50915091506000828015611baf575081516020145b611bba576000611bcb565b611bcb82600063ffffffff6130d816565b90506000878681518110611bdb57fe5b60200260200101518281611beb57fe5b0490508b811080611bfa57508b155b15611c0357809b505b505060019093019250611ace915050565b5050505050611da8565b6001600160e01b0319811663619ce88560e11b1415611d0a57604051606090632a17967960e21b90611c5b908690600090819081906024016153fa565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925260045491519092506000916001600160a01b031690611cad908490614f04565b600060405180830381855afa9150503d8060008114611ce8576040519150601f19603f3d011682016040523d82523d6000602084013e611ced565b606091505b5050905080611cfd576000611d01565b6000195b93505050611da8565b6001600160e01b031981166394cfcdd760e01b1415611da857606080611d2f8561216c565b80519194509250905060005b818114611da3576000611d6189858481518110611d5457fe5b602002602001015161182c565b90506000858381518110611d7157fe5b60200260200101518281611d8157fe5b04905087811080611d90575087155b15611d99578097505b5050600101611d3b565b505050505b5092915050565b600080611dc2838263ffffffff61307116565b91506001600160e01b03198216630f47261b60e41b14611df45760405162461bcd60e51b815260040161080590615675565b611e0583601063ffffffff6130a516565b9050915091565b60008060006060611e1f85610772613600565b6000611e38600487518861302e9092919063ffffffff16565b806020019051611e4b9190810190614be1565b91965094509250905060ff81166006811115611e6357fe5b9450509193509193565b60008060608080611e84868563ffffffff61307116565b94506001600160e01b0319851663a7cb5fb760e01b14611eb65760405162461bcd60e51b815260040161080590615675565b505050506024828101516044840151606485015160848601519496929591820184019490820184019391010190565b60006117ec84611f376040518060400160405280600b81526020016a0c1e08141c9bdd1bd8dbdb60aa1b815250604051806040016040528060058152602001640332e302e360dc1b815250878761358a565b61360b565b6060808251604051908082528060200260200182016040528015611f6a578160200160208202803883390190505b50905060005b83518114611da857838181518110611f8457fe5b60200260200101516001600160a01b031631828281518110611fa257fe5b6020908102919091010152600101611f70565b606060008451905080604051908082528060200260200182016040528015611fe7578160200160208202803883390190505b50915060005b81811461206f5761203886828151811061200357fe5b602002602001015186838151811061201757fe5b602002602001015186848151811061202b57fe5b60200260200101516127e9565b83828151811061204457fe5b6020026020010190600481111561205757fe5b9081600481111561206457fe5b905250600101611fed565b50509392505050565b60405160609063012b8bc960e11b906120979085908590602401615030565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905092915050565b600060608060606120e48561077261361a565b84516120fa90869060049063ffffffff61302e16565b8060200190516109f89190810190614223565b60405160609063a7cb5fb760e01b90612130908790879087908790602401614f72565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050949350505050565b6000606080612181848463ffffffff61307116565b92506001600160e01b031983166394cfcdd760e01b146121b35760405162461bcd60e51b815260040161080590615675565b83516121c990859060049063ffffffff61314716565b8060200190516121dc9190810190614691565b9395909450915050565b600060606121f683610772613625565b825161220c90849060049063ffffffff61302e16565b806020019051610960919081019061476d565b60065481565b60008060608161223b858263ffffffff61307116565b93506001600160e01b0319841663619ce88560e11b1461226d5760405162461bcd60e51b815260040161080590615675565b845161228390869060049063ffffffff61314716565b80602001905161229691908101906141cc565b9597919650949350915050565b6000806122b283610772613630565b60006122cb600485518661302e9092919063ffffffff16565b8060200190516122de9190810190614b7d565b9250905060ff81166001811115610a5557fe5b606060008251905080604051908082528060200260200182016040528015612323578160200160208202803883390190505b50915060005b818114610bd45761234085858381518110611d5457fe5b83828151811061234c57fe5b6020908102919091010152600101612329565b600080612372838263ffffffff61307116565b90506001600160e01b031981166394cfcdd760e01b141561240b576060806123998561216c565b80519194509250905060005b8181146124005760006123be89858481518110610ba857fe5b905060008583815181106123ce57fe5b602002602001015182816123de57fe5b049050878110806123ed575087155b156123f6578097505b50506001016123a5565b506108db9350505050565b6001600160e01b03198116630f47261b60e41b141561246457600061243784601063ffffffff6130a516565b600154604051919250606091636eb1769f60e11b9161188d9189916001600160a01b031690602401614f34565b6001600160e01b0319811663012b8bc960e11b141561269757600080612489856107bf565b6002546040519295509093506060925063e985e9c560e01b916124bc918a916001600160a01b0390911690602401614f34565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060846001600160a01b03168360405161250d9190614f04565b600060405180830381855afa9150503d8060008114612548576040519150601f19603f3d011682016040523d82523d6000602084013e61254d565b606091505b509150915081158061256157508051602014155b8061257d575061257881600063ffffffff6130d816565b600114155b156126885760405160609063020604bf60e21b9061259f9087906024016151ff565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050856001600160a01b0316816040516125ec9190614f04565b600060405180830381855afa9150503d8060008114612627576040519150601f19603f3d011682016040523d82523d6000602084013e61262c565b606091505b509093509150828015612640575081516020145b801561266f57506002546001600160a01b031661266483600c63ffffffff6130a516565b6001600160a01b0316145b61267a57600061267d565b60015b60ff16975050611c14565b60001996505050505050611da8565b6001600160e01b0319811663a7cb5fb760e01b14156127c55760006126bb84611e6d565b50506003546040519294506060935063e985e9c560e01b926126ec925089916001600160a01b031690602401614f34565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060836001600160a01b03168360405161273d9190614f04565b600060405180830381855afa9150503d8060008114612778576040519150601f19603f3d011682016040523d82523d6000602084013e61277d565b606091505b5091509150818015612790575080516020145b80156127ac57506127a881600063ffffffff6130d816565b6001145b6127b757600061194d565b600019955050505050611da8565b6001600160e01b0319811663619ce88560e11b1415611da857506000199392505050565b60006127f3613afb565b6128468584600560009054906101000a90046001600160a01b03166001600160a01b0316631ce4c78b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561156b57600080fd5b60408051600480825260a0820190925291925060609190816020015b606081526020019060019003908161286257505060408051600480825260a082019092529192506060919060208201608080388339505060408051600480825260a08201909252929350606092915060208201608080388339505060408051600480825260a08201909252929350606092915060208201608080388339019050509050886101600151846000815181106128f857fe5b6020026020010181905250878360008151811061291157fe5b60200260200101906001600160a01b031690816001600160a01b03168152505088600001518260008151811061294357fe5b60200260200101906001600160a01b031690816001600160a01b031681525050868160008151811061297157fe5b6020026020010181815250508861014001518460018151811061299057fe5b60200260200101819052508860000151836001815181106129ad57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505087826001815181106129db57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050846000015181600181518110612a0d57fe5b602002602001018181525050886101a0015184600281518110612a2c57fe5b60200260200101819052508783600281518110612a4557fe5b60200260200101906001600160a01b031690816001600160a01b031681525050886040015182600281518110612a7757fe5b60200260200101906001600160a01b031690816001600160a01b031681525050846060015181600281518110612aa957fe5b60200260200101818152505088610180015184600381518110612ac857fe5b6020026020010181905250886000015183600381518110612ae557fe5b60200260200101906001600160a01b031690816001600160a01b031681525050886040015182600381518110612b1757fe5b60200260200101906001600160a01b031690816001600160a01b03168152505084604001518160038151811061177057fe5b6040516060906394cfcdd760e01b9061209790859085906024016151ac565b6000612b7a828263ffffffff61307116565b90506001600160e01b03198116630f47261b60e41b1480612bab57506001600160e01b0319811663012b8bc960e11b145b80612bc657506001600160e01b0319811663a7cb5fb760e01b145b80612be157506001600160e01b031981166394cfcdd760e01b145b80612bfc57506001600160e01b0319811663619ce88560e11b145b612c185760405162461bcd60e51b815260040161080590615675565b919050565b606080606060008551905080604051908082528060200260200182016040528015612c6257816020015b612c4f613b2a565b815260200190600190039081612c475790505b50935080604051908082528060200260200182016040528015612c8f578160200160208202803883390190505b50925080604051908082528060200260200182016040528015612cbc578160200160208202803883390190505b50915060005b818114612d4c57612cf9878281518110612cd857fe5b6020026020010151878381518110612cec57fe5b6020026020010151612d6e565b8751889085908110612d0757fe5b60200260200101878581518110612d1a57fe5b60200260200101878681518110612d2d57fe5b9315156020948502919091019093019290925291905252600101612cc2565b50509250925092565b606080612d6284846122f1565b91506108538484610b59565b612d76613b2a565b600554604051639d3fa4b960e01b815260009182916001600160a01b0390911690639d3fa4b990612dab9088906004016156c1565b60606040518083038186803b158015612dc357600080fd5b505afa158015612dd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612dfb9190810190614885565b855160055460405163a12dcc6f60e01b815292955090916001600160a01b039091169063a12dcc6f90612e3490899089906004016156d4565b60206040518083038186803b158015612e4c57600080fd5b505afa158015612e60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612e8491908101906146e7565b91506000612e97828861014001516108b9565b60a088015160c08901516101808a01516101408b015193945091929091600091612ec69163ffffffff61363b16565b15612ef357612eec84612ee6848d6080015161366090919063ffffffff16565b8561367c565b9050612f4c565b81612f0757612eec848b608001518561367c565b6000612f18868c61018001516108b9565b90506000612f2b868d608001518761367c565b90506000612f3a83868861367c565b9050612f4682826130ef565b93505050505b612f6c612f6689604001518561369e90919063ffffffff16565b826130ef565b96506004612f7f8b8c602001518a61150e565b6004811115612f8a57fe5b14612f96576000612f98565b865b965050505050509250925092565b6000806000612fb7846107726136bd565b6000612fd0600486518761302e9092919063ffffffff16565b8060200190516108999190810190614baa565b63fdb6ca8d60e01b90565b6000612ffb836000613071565b90506001600160e01b0319808216908316146130295760405162461bcd60e51b81526004016108059061564f565b505050565b60608183111561304c5761304c613047600085856136c8565b6136e7565b83518211156130655761306561304760018487516136c8565b50819003910190815290565b600081600401835110156130925761309261304760038551856004016136c8565b5001602001516001600160e01b03191690565b600081601401835110156130c6576130c661304760048551856014016136c8565b5001601401516001600160a01b031690565b6000610c8883836136ef565b6318e4b14160e01b90565b60008183106130fe5781610c88565b5090919050565b634678472b60e01b90565b63b6555d6f60e01b90565b6324410cd360e11b90565b631b8388f760e01b90565b630e94a7ed60e41b90565b634ad3127560e01b90565b60608183111561316057613160613047600085856136c8565b83518211156131795761317961304760018487516136c8565b8282036040519080825280601f01601f1916602001820160405280156131a6576020820181803883390190505b509050610c886131b582613719565b846131bf87613719565b01835161371f565b60608060606131e360048551866131479092919063ffffffff16565b80602001905161091b9190810190614592565b60408051600180825281830190925260609182918291816020015b613219613a68565b8152602001906001900390816132115750506040805160018082528183019092529194506020808301908038833901905050604080516001808252818301909252919350816020015b6060815260200190600190039081613262575050845190915061328f90859060049063ffffffff61314716565b8060200190516132a29190810190614a5c565b856000815181106132af57fe5b60200260200101856000815181106132c357fe5b60200260200101856000815181106132d757fe5b6020908102919091010192909252919052529193909250565b60408051600180825281830190925260609182918291602080830190803883395050855191935061332c9186915060049063ffffffff61314716565b80602001905161333f919081019061460b565b8451859060009061334c57fe5b60209081029190910101919091529095929450925050565b628e3db960e51b90565b613376613afb565b6020810184905260a085015160808601516133929186916137c4565b815260a085015160c08601516133a99186916137c4565b604082015260a085015160e08601516133c39186916137c4565b60608201526133d8828463ffffffff6137f816565b6080820152949350505050565b60405160009060609063b04fbddd60e01b9061340b908890889088908890602401615049565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925260055491519092506060916001600160a01b03169061345d908490614f04565b6000604051808303816000865af19150503d806000811461349a576040519150601f19603f3d011682016040523d82523d6000602084013e61349f565b606091505b509150600090506134b6828263ffffffff61307116565b90506134c061311b565b6001600160e01b0319828116911614156134fd5760006134df8361096a565b5091505060ff811660048111156134f257fe5b9450505050506117ec565b613505613105565b6001600160e01b031982811691161415613538576000613524836108e1565b509091505060ff811660048111156134f257fe5b815160208301207ff43f26ea5a94b478394a975e856464913dc1a8a1ca70939d974aa7c238aa0ce0141561357257600493505050506117ec565b60405162461bcd60e51b8152600401610805906155c4565b8351602094850120835193850193909320604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f815295860194909452928401929092526060830152608082015260a0902090565b6000610c88826135f085613829565b6138a4565b6350ae068360e11b90565b630fcb446360e31b90565b6000610c88826135f0856138c3565b635bd0428d60e01b90565b6320d11f6160e01b90565b633d66146160e21b90565b600081518351148015610c885750508051602091820120825192909101919091201490565b600082820183811015610c8857610c886130476000868661397c565b60006117ec83613692868563ffffffff6137f816565b9063ffffffff61399b16565b6000828211156136b7576136b76130476002858561397c565b50900390565b631ca78ed960e31b90565b6060632800659560e01b848484604051602401610c53939291906154cf565b805160208201fd5b600081602001835110156137105761371061304760058551856020016136c8565b50016020015190565b60200190565b6020811015613749576001816020036101000a038019835116818551168082178652505050613029565b8282141561375657613029565b828211156137905760208103905080820181840181515b8285101561378857845186526020958601959094019361376d565b905250613029565b60208103905080820181840183515b818612156137bb5782518252601f19928301929091019061379f565b85525050505050565b60006137d18484846139c5565b156137e4576137e4613047858585613a2b565b6117ec83613692868563ffffffff6137f816565b600082613807575060006108db565b8282028284828161381457fe5b0414610c8857610c886130476001868661397c565b608081810151825160208085015160408087015160609788015186519685019690962082517fec69816980a3a3ca4554410e60253953e9ff375ba4536a98adfa15cc7154150881529485019590955290830191909152948101949094526001600160a01b039091169183019190915260a082015260c0902090565b60405161190160f01b8152600281019290925260228201526042902090565b6101408101516101608201516101808301516101a08401516000937ff80322eb8376aafb64eadf8f0d7623f22130fd9491a221e902b713cb984a75349390929091602087101561390f57fe5b601f1987018051610140890180516101608b0180516101808d0180516101a08f0180519d89528c5160209d8e012087528b519b8d019b909b2084528951998c01999099208152875197909a019690962088526101e085209390945290529190529252919091529050919050565b606063e946c1bb60e01b848484604051602401610c5393929190615460565b6000816139b1576139b16130476003858561397c565b60008284816139bc57fe5b04949350505050565b6000826139d7576139d7613047613a4a565b8115806139e2575083155b156139ef57506000610c88565b600083806139f957fe5b8584099050613a0e858463ffffffff6137f816565b613a20826103e863ffffffff6137f816565b101595945050505050565b606063339f3de260e01b848484604051602401610c53939291906156f9565b60408051808201909152600481526329e460df60e21b602082015290565b604051806101c0016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001606081525090565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6040805160608101909152806000815260006020820181905260409091015290565b80356108db816157d2565b80516108db816157d2565b600082601f830112613b72578081fd5b8135613b85613b8082615735565b61570f565b818152915060208083019084810181840286018201871015613ba657600080fd5b60005b84811015611da3578135613bbc816157d2565b84529282019290820190600101613ba9565b600082601f830112613bde578081fd5b8151613bec613b8082615735565b8181529150602080830190840160005b83811015613c2957613c148760208451890101613e4e565b83526020928301929190910190600101613bfc565b5050505092915050565b600082601f830112613c43578081fd5b8135613c51613b8082615735565b8181529150602080830190840160005b83811015613c2957613c798760208435890101613e00565b83526020928301929190910190600101613c61565b600082601f830112613c9e578081fd5b8151613cac613b8082615735565b8181529150602080830190840160005b83811015613c2957613cd48760208451890101613fe2565b83526020928301929190910190600101613cbc565b600082601f830112613cf9578081fd5b8135613d07613b8082615735565b8181529150602080830190840160005b83811015613c2957613d2f8760208435890101613e94565b83526020928301929190910190600101613d17565b600082601f830112613d54578081fd5b8151613d62613b8082615735565b818152915060208083019084810181840286018201871015613d8357600080fd5b60005b84811015611da357815184529282019290820190600101613d86565b600082601f830112613db2578081fd5b8135613dc0613b8082615735565b818152915060208083019084810181840286018201871015613de157600080fd5b60005b84811015611da357813584529282019290820190600101613de4565b600082601f830112613e10578081fd5b8135613e1e613b8082615754565b9150808252836020828501011115613e3557600080fd5b8060208401602084013760009082016020015292915050565b600082601f830112613e5e578081fd5b8151613e6c613b8082615754565b9150808252836020828501011115613e8357600080fd5b611da8816020840160208601615777565b60006101c0808385031215613ea7578182fd5b613eb08161570f565b915050613ebd8383613b4c565b8152613ecc8360208401613b4c565b6020820152613ede8360408401613b4c565b6040820152613ef08360608401613b4c565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e0820152610100808301358183015250610120808301358183015250610140808301356001600160401b0380821115613f5157600080fd5b613f5d86838701613e00565b83850152610160925082850135915080821115613f7957600080fd5b613f8586838701613e00565b83850152610180925082850135915080821115613fa157600080fd5b613fad86838701613e00565b838501526101a0925082850135915080821115613fc957600080fd5b50613fd685828601613e00565b82840152505092915050565b60006101c0808385031215613ff5578182fd5b613ffe8161570f565b91505061400b8383613b57565b815261401a8360208401613b57565b602082015261402c8360408401613b57565b604082015261403e8360608401613b57565b60608201526080820151608082015260a082015160a082015260c082015160c082015260e082015160e0820152610100808301518183015250610120808301518183015250610140808301516001600160401b038082111561409f57600080fd5b6140ab86838701613e4e565b838501526101609250828501519150808211156140c757600080fd5b6140d386838701613e4e565b838501526101809250828501519150808211156140ef57600080fd5b6140fb86838701613e4e565b838501526101a092508285015191508082111561411757600080fd5b50613fd685828601613e4e565b805160ff811681146108db57600080fd5b600060208284031215614146578081fd5b8135610c88816157d2565b60008060408385031215614163578081fd5b825161416e816157d2565b602084015190925061417f816157d2565b809150509250929050565b60008060006060848603121561419e578081fd5b83516141a9816157d2565b60208501519093506141ba816157d2565b80925050604084015190509250925092565b6000806000606084860312156141e0578081fd5b83516141eb816157d2565b60208501519093506001600160401b03811115614206578182fd5b61421286828701613e4e565b925050604084015190509250925092565b60008060008060808587031215614238578182fd5b8451614243816157d2565b60208601519094506001600160401b038082111561425f578384fd5b61426b88838901613e4e565b94506040870151915080821115614280578384fd5b61428c88838901613e4e565b935060608701519150808211156142a1578283fd5b506142ae87828801613e4e565b91505092959194509250565b600080604083850312156142cc578182fd5b82356142d7816157d2565b915060208301356001600160401b038111156142f1578182fd5b6142fd85828601613c33565b9150509250929050565b6000806000806080858703121561431c578182fd5b8435614327816157d2565b935060208501356001600160401b0380821115614342578384fd5b61434e88838901613da2565b94506040870135915080821115614363578384fd5b61436f88838901613da2565b93506060870135915080821115614384578283fd5b506142ae87828801613e00565b600080604083850312156143a3578182fd5b82356143ae816157d2565b915060208301356001600160401b038111156143c8578182fd5b6142fd85828601613e00565b6000806000606084860312156143e8578081fd5b83356143f3816157d2565b925060208401356001600160401b0381111561440d578182fd5b61441986828701613e00565b925050604084013590509250925092565b6000806040838503121561443c578182fd5b8235614447816157d2565b946020939093013593505050565b600060208284031215614466578081fd5b81356001600160401b0381111561447b578182fd5b6117ec84828501613b62565b600060208284031215614498578081fd5b81516001600160401b038111156144ad578182fd5b6117ec84828501613c8e565b6000806000606084860312156144cd578081fd5b83356001600160401b03808211156144e3578283fd5b6144ef87838801613ce9565b94506020860135915080821115614504578283fd5b61451087838801613b62565b93506040860135915080821115614525578283fd5b5061453286828701613da2565b9150509250925092565b6000806040838503121561454e578182fd5b82356001600160401b0380821115614564578384fd5b61457086838701613ce9565b93506020850135915080821115614585578283fd5b506142fd85828601613c33565b6000806000606084860312156145a6578081fd5b83516001600160401b03808211156145bc578283fd5b6145c887838801613c8e565b945060208601519150808211156145dd578283fd5b6145e987838801613d44565b935060408601519150808211156145fe578283fd5b5061453286828701613bce565b60008060006060848603121561461f578081fd5b83516001600160401b0380821115614635578283fd5b61464187838801613c8e565b94506020860151935060408601519150808211156145fe578283fd5b6000806040838503121561466f578182fd5b82356001600160401b0380821115614685578384fd5b61457086838701613da2565b600080604083850312156146a3578182fd5b82516001600160401b03808211156146b9578384fd5b6146c586838701613d44565b935060208501519150808211156146da578283fd5b506142fd85828601613bce565b6000602082840312156146f8578081fd5b81518015158114610c88578182fd5b6000806000806080858703121561471c578182fd5b84519350602085015161472e816157d2565b60408601519093506001600160401b0380821115614280578384fd5b6000806040838503121561475c578182fd5b505080516020909101519092909150565b6000806040838503121561477f578182fd5b8251915060208301516001600160401b0381111561479b578182fd5b6142fd85828601613e4e565b6000806000606084860312156147bb578081fd5b8351925060208401516001600160401b03808211156147d8578283fd5b6147e487838801613e4e565b935060408601519150808211156147f9578283fd5b5061453286828701613e4e565b60008060408385031215614818578182fd5b82519150602083015161417f816157e7565b6000806040838503121561483c578182fd5b82516001600160e01b03198116811461416e578283fd5b600060208284031215614864578081fd5b81356001600160401b03811115614879578182fd5b6117ec84828501613e00565b600060608284031215614896578081fd5b6148a0606061570f565b8251600781106148ae578283fd5b8152602083810151908201526040928301519281019290925250919050565b6000602082840312156148de578081fd5b81516001600160401b038111156148f3578182fd5b6117ec84828501613fe2565b600080600060608486031215614913578081fd5b83356001600160401b03811115614928578182fd5b61493486828701613e94565b9350506020840135614945816157d2565b929592945050506040919091013590565b60008060408385031215614968578182fd5b82356001600160401b038082111561497e578384fd5b61498a86838701613e94565b9350602085013591508082111561499f578283fd5b506142fd85828601613e00565b6000806000606084860312156149c0578081fd5b83356001600160401b038111156149d5578182fd5b6149e186828701613e94565b9350506020840135915060408401356149f9816157d2565b809150509250925092565b60008060008060808587031215614a19578182fd5b84516001600160401b0380821115614a2f578384fd5b614a3b88838901613fe2565b95506020870151915080821115614a50578384fd5b61426b88838901613fe2565b600080600060608486031215614a70578081fd5b83516001600160401b0380821115614a86578283fd5b614a9287838801613fe2565b94506020860151935060408601519150808211156147f9578283fd5b600080600060608486031215614ac2578081fd5b83356001600160401b0380821115614ad8578283fd5b81860160a08189031215614aea578384fd5b614af460a061570f565b9250803583526020810135602084015260408101356040840152614b1b8860608301613b4c565b6060840152608081013582811115614b31578485fd5b614b3d89828401613e00565b608085015250919450505060208401359150614b5c8560408601613b4c565b90509250925092565b600060208284031215614b76578081fd5b5051919050565b60008060408385031215614b8f578182fd5b8251614b9a816157e7565b6020939093015192949293505050565b600080600060608486031215614bbe578081fd5b8351614bc9816157e7565b6020850151604086015191945092506149f9816157d2565b60008060008060808587031215614bf6578182fd5b614c008686614124565b9350602085015192506040850151614c17816157d2565b60608601519092506001600160401b03811115614c32578182fd5b6142ae87828801613e4e565b600080600060608486031215614c52578081fd5b614c5c8585614124565b92506020840151915060408401516001600160401b03811115614c7d578182fd5b61453286828701613e4e565b600080600060608486031215614c9d578081fd5b614ca78585614124565b925060208401519150604084015190509250925092565b1515815260200190565b6000614cd48383614de1565b505060600190565b6001600160a01b03169052565b6000815180845260208401935060208301825b82811015614d235781516001600160a01b0316865260209586019590910190600101614cfc565b5093949350505050565b600081518084526020840180819550602083028101915060208501845b84811015614d78578284038852614d62848351614db5565b6020988901989094509190910190600101614d4a565b50919695505050505050565b6000815180845260208401935060208301825b82811015614d23578151865260209586019590910190600101614d97565b60008151808452614dcd816020860160208601615777565b601f01601f19169290920160200192915050565b8051614dec816157c8565b825260208181015190830152604090810151910152565b60006101c0614e13848451614cdc565b6020830151614e256020860182614cdc565b506040830151614e386040860182614cdc565b506060830151614e4b6060860182614cdc565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e0850152610100808401518186015250610120808401518186015250610140808401518282870152614ea483870182614db5565b91505061016091508184015185820383870152614ec18282614db5565b925050506101808084015185830382870152614edd8382614db5565b9150506101a091508184015185820383870152614efa8282614db5565b9695505050505050565b60008251614f16818460208701615777565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0385168152608060208201819052600090614f9690830186614d84565b8281036040840152614fa88186614d84565b8381036060850152614fba8186614db5565b98975050505050505050565b6001600160a01b0384168152606060208201819052600090614fea90830185614db5565b9050826040830152949350505050565b6001600160a01b038516815260806020820181905260009061501e90830186614db5565b8281036040840152614fa88186614db5565b6001600160a01b03929092168252602082015260400190565b60006080825261505c6080830187614d2d565b828103602084015261506e8187614ce9565b83810360408501526150808187614ce9565b91505082810360608401526150958185614d84565b979650505050505050565b602080825282518282018190526000918401906040840190835b818110156150e2578351600581106150ce57fe5b8352602093840193909201916001016150ba565b509095945050505050565b6000606082016060835280865161510481846151ff565b9150602088019250835b8181101561513257615121838551614cc8565b60209490940193925060010161510e565b505083810360208501526151468187614d84565b915050828103604084015280845161515e81846151ff565b9150602086019250835b8181101561518c5761517b838551614cbe565b602094909401939250600101615168565b5090979650505050505050565b600060208252610c886020830184614d84565b6000604082526151bf6040830185614d84565b82810360208401526151d18185614d2d565b95945050505050565b6000604082526151ed6040830185614d84565b82810360208401526151d18185614d84565b90815260200190565b8481526001600160a01b038416602082015260806040820181905260009061523290830185614db5565b82810360608401526150958185614db5565b918252602082015260400190565b6000838252604060208301526117ec6040830184614db5565b6000848252606060208301526152846060830185614db5565b8281036040840152614efa8185614db5565b828152604081016152a6836157c8565b8260208301529392505050565b6001600160e01b031991909116815260200190565b6001600160e01b03199290921682526001600160a01b0316602082015260400190565b6001600160e01b0319861681526001600160a01b038516602082015260a06040820181905260009061531f90830186614d84565b82810360608401526153318186614d84565b83810360808501526117888186614db5565b6001600160e01b0319851681526001600160a01b038416602082015260806040820181905260009061537790830185614db5565b905082606083015295945050505050565b6001600160e01b03199390931683526001600160a01b03919091166020830152604082015260600190565b600063ffffffff60e01b85168252606060208301526153d56060830185614d84565b8281036040840152614efa8185614d2d565b600060208252610c886020830184614db5565b60006080825261540d6080830187614db5565b6001600160a01b03958616602084015293909416604082015260ff9190911660609091015292915050565b6000615443856157a7565b848252836020830152606060408301526151d16060830184614db5565b6060810161546d856157b4565b938152602081019290925260409091015290565b6060810161548e856157be565b93815260208101929092526001600160a01b031660409091015290565b604081016154b8846157b4565b9281526020015290565b6060810161546d856157be565b606081016008851061546d57fe5b60208101600583106154eb57fe5b91905290565b60006154fc866157c8565b858252602082018590526001600160a01b0384166040830152608060608301819052614efa90830184614db5565b604081016154b8846157a7565b60006080825261554a6080830187614db5565b602083820381850152818751808452828401915082838202850101838a01865b8381101561559857601f19878403018552615586838351614e03565b9486019492509085019060010161556a565b505086810360408801526155ac818a614d84565b94505050505082810360608401526150958185614d2d565b602080825260139082015272554e4b4e4f574e5f52455455524e5f4441544160681b604082015260600190565b60208082526019908201527f554e4b4e4f574e5f46554e4354494f4e5f53454c4543544f5200000000000000604082015260600190565b6020808252600d908201526c15539253541311535153951151609a1b604082015260600190565b6020808252600c908201526b2120a22fa9a2a622a1aa27a960a11b604082015260600190565b6020808252600e908201526d15d493d391d7d41493d61657d25160921b604082015260600190565b60a081016156ab8286614de1565b8360608301528215156080830152949350505050565b600060208252610c886020830184614e03565b6000604082526156e76040830185614e03565b82810360208401526151d18185614db5565b9283526020830191909152604082015260600190565b6040518181016001600160401b038111828210171561572d57600080fd5b604052919050565b60006001600160401b0382111561574a578081fd5b5060209081020190565b60006001600160401b03821115615769578081fd5b50601f01601f191660200190565b60005b8381101561579257818101518382015260200161577a565b838111156157a1576000848401525b50505050565b600281106157b157fe5b50565b600481106157b157fe5b600381106157b157fe5b600781106157b157fe5b6001600160a01b03811681146157b157600080fd5b60ff811681146157b157600080fdfea365627a7a72315820ffa7410ae8ac1618f6d2406caae09db56a6e970aba5c127522015bc46216cddd6c6578706572696d656e74616cf564736f6c63430005100040'; public static contractName = 'DevUtils'; private readonly _methodABIIndex: { [name: string]: number } = {}; public static async deployFrom0xArtifactAsync( diff --git a/packages/contract-wrappers/src/generated-wrappers/erc20_token.ts b/packages/contract-wrappers/src/generated-wrappers/erc20_token.ts index 7655224d21..88b7dc636c 100644 --- a/packages/contract-wrappers/src/generated-wrappers/erc20_token.ts +++ b/packages/contract-wrappers/src/generated-wrappers/erc20_token.ts @@ -34,17 +34,11 @@ import { assert } from '@0x/assert'; import * as ethers from 'ethers'; // tslint:enable:no-unused-variable -export type ERC20TokenEventArgs = ERC20TokenTransferEventArgs | ERC20TokenApprovalEventArgs; +export type ERC20TokenEventArgs = ERC20TokenApprovalEventArgs | ERC20TokenTransferEventArgs; export enum ERC20TokenEvents { - Transfer = 'Transfer', Approval = 'Approval', -} - -export interface ERC20TokenTransferEventArgs extends DecodedLogArgs { - _from: string; - _to: string; - _value: BigNumber; + Transfer = 'Transfer', } export interface ERC20TokenApprovalEventArgs extends DecodedLogArgs { @@ -53,6 +47,12 @@ export interface ERC20TokenApprovalEventArgs extends DecodedLogArgs { _value: BigNumber; } +export interface ERC20TokenTransferEventArgs extends DecodedLogArgs { + _from: string; + _to: string; + _value: BigNumber; +} + /* istanbul ignore next */ // tslint:disable:no-parameter-reassignment // tslint:disable-next-line:class-name @@ -135,6 +135,75 @@ export class ERC20TokenContract extends BaseContract { */ public static ABI(): ContractAbi { const abi = [ + { + anonymous: false, + inputs: [ + { + name: '_owner', + type: 'address', + indexed: true, + }, + { + name: '_spender', + type: 'address', + indexed: true, + }, + { + name: '_value', + type: 'uint256', + indexed: false, + }, + ], + name: 'Approval', + outputs: [], + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + name: '_from', + type: 'address', + indexed: true, + }, + { + name: '_to', + type: 'address', + indexed: true, + }, + { + name: '_value', + type: 'uint256', + indexed: false, + }, + ], + name: 'Transfer', + outputs: [], + type: 'event', + }, + { + constant: true, + inputs: [ + { + name: '_owner', + type: 'address', + }, + { + name: '_spender', + type: 'address', + }, + ], + name: 'allowance', + outputs: [ + { + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, { constant: false, inputs: [ @@ -160,8 +229,13 @@ export class ERC20TokenContract extends BaseContract { }, { constant: true, - inputs: [], - name: 'totalSupply', + inputs: [ + { + name: '_owner', + type: 'address', + }, + ], + name: 'balanceOf', outputs: [ { name: '', @@ -172,42 +246,10 @@ export class ERC20TokenContract extends BaseContract { stateMutability: 'view', type: 'function', }, - { - constant: false, - inputs: [ - { - name: '_from', - type: 'address', - }, - { - name: '_to', - type: 'address', - }, - { - name: '_value', - type: 'uint256', - }, - ], - name: 'transferFrom', - outputs: [ - { - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, { constant: true, - inputs: [ - { - name: '_owner', - type: 'address', - }, - ], - name: 'balanceOf', + inputs: [], + name: 'totalSupply', outputs: [ { name: '', @@ -242,73 +284,31 @@ export class ERC20TokenContract extends BaseContract { type: 'function', }, { - constant: true, - inputs: [ - { - name: '_owner', - type: 'address', - }, - { - name: '_spender', - type: 'address', - }, - ], - name: 'allowance', - outputs: [ - { - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - anonymous: false, + constant: false, inputs: [ { name: '_from', type: 'address', - indexed: true, }, { name: '_to', type: 'address', - indexed: true, }, { name: '_value', type: 'uint256', - indexed: false, }, ], - name: 'Transfer', - outputs: [], - type: 'event', - }, - { - anonymous: false, - inputs: [ + name: 'transferFrom', + outputs: [ { - name: '_owner', - type: 'address', - indexed: true, - }, - { - name: '_spender', - type: 'address', - indexed: true, - }, - { - name: '_value', - type: 'uint256', - indexed: false, + name: '', + type: 'bool', }, ], - name: 'Approval', - outputs: [], - type: 'event', + payable: false, + stateMutability: 'nonpayable', + type: 'function', }, ] as ContractAbi; return abi; @@ -341,6 +341,27 @@ export class ERC20TokenContract extends BaseContract { return abiEncoder.getSelector(); } + public allowance(_owner: string, _spender: string): ContractFunctionObj { + const self = (this as any) as ERC20TokenContract; + assert.isString('_owner', _owner); + assert.isString('_spender', _spender); + const functionSignature = 'allowance(address,address)'; + + return { + async callAsync(callData: Partial = {}, defaultBlock?: BlockParam): Promise { + BaseContract._assertCallParams(callData, defaultBlock); + const rawCallResult = await self._performCallAsync( + { ...callData, data: this.getABIEncodedTransactionData() }, + defaultBlock, + ); + const abiEncoder = self._lookupAbiEncoder(functionSignature); + return abiEncoder.strictDecodeReturnValue(rawCallResult); + }, + getABIEncodedTransactionData(): string { + return self._strictEncodeArguments(functionSignature, [_owner.toLowerCase(), _spender.toLowerCase()]); + }, + }; + } /** * `msg.sender` approves `_spender` to spend `_value` tokens * @param _spender The address of the account able to transfer the tokens @@ -394,84 +415,6 @@ export class ERC20TokenContract extends BaseContract { }, }; } - /** - * Query total supply of token - * @returns Total supply of token - */ - public totalSupply(): ContractFunctionObj { - const self = (this as any) as ERC20TokenContract; - const functionSignature = 'totalSupply()'; - - return { - async callAsync(callData: Partial = {}, defaultBlock?: BlockParam): Promise { - BaseContract._assertCallParams(callData, defaultBlock); - const rawCallResult = await self._performCallAsync( - { ...callData, data: this.getABIEncodedTransactionData() }, - defaultBlock, - ); - const abiEncoder = self._lookupAbiEncoder(functionSignature); - return abiEncoder.strictDecodeReturnValue(rawCallResult); - }, - getABIEncodedTransactionData(): string { - return self._strictEncodeArguments(functionSignature, []); - }, - }; - } - /** - * send `value` token to `to` from `from` on the condition it is approved by `from` - * @param _from The address of the sender - * @param _to The address of the recipient - * @param _value The amount of token to be transferred - * @returns True if transfer was successful - */ - public transferFrom(_from: string, _to: string, _value: BigNumber): ContractTxFunctionObj { - const self = (this as any) as ERC20TokenContract; - assert.isString('_from', _from); - assert.isString('_to', _to); - assert.isBigNumber('_value', _value); - const functionSignature = 'transferFrom(address,address,uint256)'; - - return { - async sendTransactionAsync( - txData?: Partial | undefined, - opts: SendTransactionOpts = { shouldValidate: true }, - ): Promise { - const txDataWithDefaults = await self._applyDefaultsToTxDataAsync( - { ...txData, data: this.getABIEncodedTransactionData() }, - this.estimateGasAsync.bind(this), - ); - if (opts.shouldValidate !== false) { - await this.callAsync(txDataWithDefaults); - } - return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults); - }, - awaitTransactionSuccessAsync( - txData?: Partial, - opts: AwaitTransactionSuccessOpts = { shouldValidate: true }, - ): PromiseWithTransactionHash { - return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts); - }, - async estimateGasAsync(txData?: Partial | undefined): Promise { - const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({ - ...txData, - data: this.getABIEncodedTransactionData(), - }); - return self._web3Wrapper.estimateGasAsync(txDataWithDefaults); - }, - async callAsync(callData: Partial = {}, defaultBlock?: BlockParam): Promise { - BaseContract._assertCallParams(callData, defaultBlock); - const rawCallResult = await self._performCallAsync( - { ...callData, data: this.getABIEncodedTransactionData() }, - defaultBlock, - ); - const abiEncoder = self._lookupAbiEncoder(functionSignature); - return abiEncoder.strictDecodeReturnValue(rawCallResult); - }, - getABIEncodedTransactionData(): string { - return self._strictEncodeArguments(functionSignature, [_from.toLowerCase(), _to.toLowerCase(), _value]); - }, - }; - } /** * Query the balance of owner * @param _owner The address from which the balance will be retrieved @@ -497,6 +440,29 @@ export class ERC20TokenContract extends BaseContract { }, }; } + /** + * Query total supply of token + * @returns Total supply of token + */ + public totalSupply(): ContractFunctionObj { + const self = (this as any) as ERC20TokenContract; + const functionSignature = 'totalSupply()'; + + return { + async callAsync(callData: Partial = {}, defaultBlock?: BlockParam): Promise { + BaseContract._assertCallParams(callData, defaultBlock); + const rawCallResult = await self._performCallAsync( + { ...callData, data: this.getABIEncodedTransactionData() }, + defaultBlock, + ); + const abiEncoder = self._lookupAbiEncoder(functionSignature); + return abiEncoder.strictDecodeReturnValue(rawCallResult); + }, + getABIEncodedTransactionData(): string { + return self._strictEncodeArguments(functionSignature, []); + }, + }; + } /** * send `value` token to `to` from `msg.sender` * @param _to The address of the recipient @@ -550,24 +516,58 @@ export class ERC20TokenContract extends BaseContract { }, }; } - public allowance(_owner: string, _spender: string): ContractFunctionObj { + /** + * send `value` token to `to` from `from` on the condition it is approved by `from` + * @param _from The address of the sender + * @param _to The address of the recipient + * @param _value The amount of token to be transferred + * @returns True if transfer was successful + */ + public transferFrom(_from: string, _to: string, _value: BigNumber): ContractTxFunctionObj { const self = (this as any) as ERC20TokenContract; - assert.isString('_owner', _owner); - assert.isString('_spender', _spender); - const functionSignature = 'allowance(address,address)'; + assert.isString('_from', _from); + assert.isString('_to', _to); + assert.isBigNumber('_value', _value); + const functionSignature = 'transferFrom(address,address,uint256)'; return { - async callAsync(callData: Partial = {}, defaultBlock?: BlockParam): Promise { + async sendTransactionAsync( + txData?: Partial | undefined, + opts: SendTransactionOpts = { shouldValidate: true }, + ): Promise { + const txDataWithDefaults = await self._applyDefaultsToTxDataAsync( + { ...txData, data: this.getABIEncodedTransactionData() }, + this.estimateGasAsync.bind(this), + ); + if (opts.shouldValidate !== false) { + await this.callAsync(txDataWithDefaults); + } + return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults); + }, + awaitTransactionSuccessAsync( + txData?: Partial, + opts: AwaitTransactionSuccessOpts = { shouldValidate: true }, + ): PromiseWithTransactionHash { + return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts); + }, + async estimateGasAsync(txData?: Partial | undefined): Promise { + const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({ + ...txData, + data: this.getABIEncodedTransactionData(), + }); + return self._web3Wrapper.estimateGasAsync(txDataWithDefaults); + }, + async callAsync(callData: Partial = {}, defaultBlock?: BlockParam): Promise { BaseContract._assertCallParams(callData, defaultBlock); const rawCallResult = await self._performCallAsync( { ...callData, data: this.getABIEncodedTransactionData() }, defaultBlock, ); const abiEncoder = self._lookupAbiEncoder(functionSignature); - return abiEncoder.strictDecodeReturnValue(rawCallResult); + return abiEncoder.strictDecodeReturnValue(rawCallResult); }, getABIEncodedTransactionData(): string { - return self._strictEncodeArguments(functionSignature, [_owner.toLowerCase(), _spender.toLowerCase()]); + return self._strictEncodeArguments(functionSignature, [_from.toLowerCase(), _to.toLowerCase(), _value]); }, }; } diff --git a/packages/contract-wrappers/src/generated-wrappers/exchange.ts b/packages/contract-wrappers/src/generated-wrappers/exchange.ts index e1374ed94d..a21c5fbca4 100644 --- a/packages/contract-wrappers/src/generated-wrappers/exchange.ts +++ b/packages/contract-wrappers/src/generated-wrappers/exchange.ts @@ -39,6 +39,7 @@ export type ExchangeEventArgs = | ExchangeCancelEventArgs | ExchangeCancelUpToEventArgs | ExchangeFillEventArgs + | ExchangeOwnershipTransferredEventArgs | ExchangeProtocolFeeCollectorAddressEventArgs | ExchangeProtocolFeeMultiplierEventArgs | ExchangeSignatureValidatorApprovalEventArgs @@ -49,6 +50,7 @@ export enum ExchangeEvents { Cancel = 'Cancel', CancelUpTo = 'CancelUpTo', Fill = 'Fill', + OwnershipTransferred = 'OwnershipTransferred', ProtocolFeeCollectorAddress = 'ProtocolFeeCollectorAddress', ProtocolFeeMultiplier = 'ProtocolFeeMultiplier', SignatureValidatorApproval = 'SignatureValidatorApproval', @@ -92,6 +94,11 @@ export interface ExchangeFillEventArgs extends DecodedLogArgs { protocolFeePaid: BigNumber; } +export interface ExchangeOwnershipTransferredEventArgs extends DecodedLogArgs { + previousOwner: string; + newOwner: string; +} + export interface ExchangeProtocolFeeCollectorAddressEventArgs extends DecodedLogArgs { oldProtocolFeeCollector: string; updatedProtocolFeeCollector: string; @@ -369,6 +376,24 @@ export class ExchangeContract extends BaseContract { outputs: [], type: 'event', }, + { + anonymous: false, + inputs: [ + { + name: 'previousOwner', + type: 'address', + indexed: true, + }, + { + name: 'newOwner', + type: 'address', + indexed: true, + }, + ], + name: 'OwnershipTransferred', + outputs: [], + type: 'event', + }, { anonymous: false, inputs: [ @@ -601,7 +626,7 @@ export class ExchangeContract extends BaseContract { name: 'batchExecuteTransactions', outputs: [ { - name: '', + name: 'returnData', type: 'bytes[]', }, ], @@ -1467,6 +1492,15 @@ export class ExchangeContract extends BaseContract { stateMutability: 'view', type: 'function', }, + { + constant: false, + inputs: [], + name: 'detachProtocolFeeCollector', + outputs: [], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, { constant: false, inputs: [ @@ -1756,7 +1790,7 @@ export class ExchangeContract extends BaseContract { name: 'getAssetProxy', outputs: [ { - name: '', + name: 'assetProxy', type: 'address', }, ], @@ -3238,7 +3272,7 @@ export class ExchangeContract extends BaseContract { * @param transactions Array of 0x transaction structures. * @param signatures Array of proofs that transactions have been signed by * signer(s). - * @returns Array containing ABI encoded return data for each of the underlying Exchange function calls. + * @returns returnData Array containing ABI encoded return data for each of the underlying Exchange function calls. */ public batchExecuteTransactions( transactions: Array<{ @@ -3302,7 +3336,7 @@ export class ExchangeContract extends BaseContract { * @param takerAssetFillAmounts Array of desired amounts of takerAsset to sell * in orders. * @param signatures Proofs that orders have been created by makers. - * @returns Array of amounts filled and fees paid by makers and taker. + * @returns fillResults Array of amounts filled and fees paid by makers and taker. */ public batchFillOrKillOrders( orders: Array<{ @@ -3405,7 +3439,7 @@ export class ExchangeContract extends BaseContract { * @param takerAssetFillAmounts Array of desired amounts of takerAsset to sell * in orders. * @param signatures Proofs that orders have been created by makers. - * @returns Array of amounts filled and fees paid by makers and taker. + * @returns fillResults Array of amounts filled and fees paid by makers and taker. */ public batchFillOrders( orders: Array<{ @@ -3508,7 +3542,7 @@ export class ExchangeContract extends BaseContract { * @param takerAssetFillAmounts Array of desired amounts of takerAsset to sell * in orders. * @param signatures Proofs that orders have been created by makers. - * @returns Array of amounts filled and fees paid by makers and taker. + * @returns fillResults Array of amounts filled and fees paid by makers and taker. */ public batchFillOrdersNoThrow( orders: Array<{ @@ -4075,6 +4109,55 @@ export class ExchangeContract extends BaseContract { }, }; } + /** + * Sets the protocolFeeCollector contract address to 0. + * Only callable by owner. + */ + public detachProtocolFeeCollector(): ContractTxFunctionObj { + const self = (this as any) as ExchangeContract; + const functionSignature = 'detachProtocolFeeCollector()'; + + return { + async sendTransactionAsync( + txData?: Partial | undefined, + opts: SendTransactionOpts = { shouldValidate: true }, + ): Promise { + const txDataWithDefaults = await self._applyDefaultsToTxDataAsync( + { ...txData, data: this.getABIEncodedTransactionData() }, + this.estimateGasAsync.bind(this), + ); + if (opts.shouldValidate !== false) { + await this.callAsync(txDataWithDefaults); + } + return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults); + }, + awaitTransactionSuccessAsync( + txData?: Partial, + opts: AwaitTransactionSuccessOpts = { shouldValidate: true }, + ): PromiseWithTransactionHash { + return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts); + }, + async estimateGasAsync(txData?: Partial | undefined): Promise { + const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({ + ...txData, + data: this.getABIEncodedTransactionData(), + }); + return self._web3Wrapper.estimateGasAsync(txDataWithDefaults); + }, + async callAsync(callData: Partial = {}, defaultBlock?: BlockParam): Promise { + BaseContract._assertCallParams(callData, defaultBlock); + const rawCallResult = await self._performCallAsync( + { ...callData, data: this.getABIEncodedTransactionData() }, + defaultBlock, + ); + const abiEncoder = self._lookupAbiEncoder(functionSignature); + return abiEncoder.strictDecodeReturnValue(rawCallResult); + }, + getABIEncodedTransactionData(): string { + return self._strictEncodeArguments(functionSignature, []); + }, + }; + } /** * Executes an Exchange method call in the context of signer. * @param transaction 0x transaction structure. @@ -4138,10 +4221,11 @@ export class ExchangeContract extends BaseContract { }; } /** - * Fills the input order. Reverts if exact takerAssetFillAmount not filled. + * Fills the input order. Reverts if exact `takerAssetFillAmount` not filled. * @param order Order struct containing order specifications. * @param takerAssetFillAmount Desired amount of takerAsset to sell. * @param signature Proof that order has been created by maker. + * @returns fillResults Amounts filled and fees paid. */ public fillOrKillOrder( order: { @@ -4237,7 +4321,7 @@ export class ExchangeContract extends BaseContract { * @param order Order struct containing order specifications. * @param takerAssetFillAmount Desired amount of takerAsset to sell. * @param signature Proof that order has been created by maker. - * @returns Amounts filled and fees paid by maker and taker. + * @returns fillResults Amounts filled and fees paid by maker and taker. */ public fillOrder( order: { @@ -4351,7 +4435,7 @@ export class ExchangeContract extends BaseContract { /** * Gets an asset proxy. * @param assetProxyId Id of the asset proxy. - * @returns The asset proxy registered to assetProxyId. Returns 0x0 if no proxy is registered. + * @returns assetProxy The asset proxy address registered to assetProxyId. Returns 0x0 if no proxy is registered. */ public getAssetProxy(assetProxyId: string): ContractFunctionObj { const self = (this as any) as ExchangeContract; @@ -4376,7 +4460,7 @@ export class ExchangeContract extends BaseContract { /** * Gets information about an order: status, hash, and amount filled. * @param order Order to gather information on. - * @returns OrderInfo Information about the order and its state. See LibOrder.OrderInfo for a complete description. + * @returns orderInfo Information about the order and its state. See LibOrder.OrderInfo for a complete description. */ public getOrderInfo(order: { makerAddress: string; @@ -4538,7 +4622,7 @@ export class ExchangeContract extends BaseContract { * @param orders Array of order specifications. * @param makerAssetFillAmount Minimum amount of makerAsset to buy. * @param signatures Proofs that orders have been signed by makers. - * @returns Amounts filled and fees paid by makers and taker. + * @returns fillResults Amounts filled and fees paid by makers and taker. */ public marketBuyOrdersFillOrKill( orders: Array<{ @@ -4636,7 +4720,7 @@ export class ExchangeContract extends BaseContract { * @param orders Array of order specifications. * @param makerAssetFillAmount Desired amount of makerAsset to buy. * @param signatures Proofs that orders have been signed by makers. - * @returns Amounts filled and fees paid by makers and taker. + * @returns fillResults Amounts filled and fees paid by makers and taker. */ public marketBuyOrdersNoThrow( orders: Array<{ @@ -4733,7 +4817,7 @@ export class ExchangeContract extends BaseContract { * @param orders Array of order specifications. * @param takerAssetFillAmount Minimum amount of takerAsset to sell. * @param signatures Proofs that orders have been signed by makers. - * @returns Amounts filled and fees paid by makers and taker. + * @returns fillResults Amounts filled and fees paid by makers and taker. */ public marketSellOrdersFillOrKill( orders: Array<{ @@ -4831,7 +4915,7 @@ export class ExchangeContract extends BaseContract { * @param orders Array of order specifications. * @param takerAssetFillAmount Desired amount of takerAsset to sell. * @param signatures Proofs that orders have been signed by makers. - * @returns Amounts filled and fees paid by makers and taker. + * @returns fillResults Amounts filled and fees paid by makers and taker. */ public marketSellOrdersNoThrow( orders: Array<{ @@ -5671,6 +5755,10 @@ export class ExchangeContract extends BaseContract { }, }; } + /** + * Change the owner of this contract. + * @param newOwner New owner address. + */ public transferOwnership(newOwner: string): ContractTxFunctionObj { const self = (this as any) as ExchangeContract; assert.isString('newOwner', newOwner); diff --git a/packages/contract-wrappers/src/generated-wrappers/forwarder.ts b/packages/contract-wrappers/src/generated-wrappers/forwarder.ts index 418ead6dcd..4e8ea20277 100644 --- a/packages/contract-wrappers/src/generated-wrappers/forwarder.ts +++ b/packages/contract-wrappers/src/generated-wrappers/forwarder.ts @@ -62,6 +62,7 @@ export class ForwarderContract extends BaseContract { txDefaults: Partial, logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }, _exchange: string, + _exchangeV2: string, _weth: string, ): Promise { assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema, [ @@ -88,6 +89,7 @@ export class ForwarderContract extends BaseContract { txDefaults, logDecodeDependenciesAbiOnly, _exchange, + _exchangeV2, _weth, ); } @@ -98,6 +100,7 @@ export class ForwarderContract extends BaseContract { txDefaults: Partial, logDecodeDependencies: { [contractName: string]: ContractAbi }, _exchange: string, + _exchangeV2: string, _weth: string, ): Promise { assert.isHexString('bytecode', bytecode); @@ -108,14 +111,14 @@ export class ForwarderContract extends BaseContract { ]); const provider = providerUtils.standardizeOrThrow(supportedProvider); const constructorAbi = BaseContract._lookupConstructorAbi(abi); - [_exchange, _weth] = BaseContract._formatABIDataItemList( + [_exchange, _exchangeV2, _weth] = BaseContract._formatABIDataItemList( constructorAbi.inputs, - [_exchange, _weth], + [_exchange, _exchangeV2, _weth], BaseContract._bigNumberToString, ); const iface = new ethers.utils.Interface(abi); const deployInfo = iface.deployFunction; - const txData = deployInfo.encode(bytecode, [_exchange, _weth]); + const txData = deployInfo.encode(bytecode, [_exchange, _exchangeV2, _weth]); const web3Wrapper = new Web3Wrapper(provider); const txDataWithDefaults = await BaseContract._applyDefaultsToContractTxDataAsync( { @@ -134,7 +137,7 @@ export class ForwarderContract extends BaseContract { txDefaults, logDecodeDependencies, ); - contractInstance.constructorArgs = [_exchange, _weth]; + contractInstance.constructorArgs = [_exchange, _exchangeV2, _weth]; return contractInstance; } @@ -149,6 +152,10 @@ export class ForwarderContract extends BaseContract { name: '_exchange', type: 'address', }, + { + name: '_exchangeV2', + type: 'address', + }, { name: '_weth', type: 'address', @@ -184,6 +191,20 @@ export class ForwarderContract extends BaseContract { stateMutability: 'payable', type: 'fallback', }, + { + constant: true, + inputs: [], + name: 'EXCHANGE_V2_ORDER_ID', + outputs: [ + { + name: '', + type: 'bytes4', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, { constant: false, inputs: [ @@ -272,12 +293,12 @@ export class ForwarderContract extends BaseContract { type: 'bytes[]', }, { - name: 'feePercentage', - type: 'uint256', + name: 'ethFeeAmounts', + type: 'uint256[]', }, { - name: 'feeRecipient', - type: 'address', + name: 'feeRecipients', + type: 'address[]', }, ], name: 'marketBuyOrdersWithEth', @@ -290,10 +311,6 @@ export class ForwarderContract extends BaseContract { name: 'makerAssetAcquiredAmount', type: 'uint256', }, - { - name: 'ethFeePaid', - type: 'uint256', - }, ], payable: true, stateMutability: 'payable', @@ -369,12 +386,12 @@ export class ForwarderContract extends BaseContract { type: 'bytes[]', }, { - name: 'feePercentage', - type: 'uint256', + name: 'ethFeeAmounts', + type: 'uint256[]', }, { - name: 'feeRecipient', - type: 'address', + name: 'feeRecipients', + type: 'address[]', }, ], name: 'marketSellOrdersWithEth', @@ -387,10 +404,6 @@ export class ForwarderContract extends BaseContract { name: 'makerAssetAcquiredAmount', type: 'uint256', }, - { - name: 'ethFeePaid', - type: 'uint256', - }, ], payable: true, stateMutability: 'payable', @@ -473,6 +486,25 @@ export class ForwarderContract extends BaseContract { return abiEncoder.getSelector(); } + public EXCHANGE_V2_ORDER_ID(): ContractFunctionObj { + const self = (this as any) as ForwarderContract; + const functionSignature = 'EXCHANGE_V2_ORDER_ID()'; + + return { + async callAsync(callData: Partial = {}, defaultBlock?: BlockParam): Promise { + BaseContract._assertCallParams(callData, defaultBlock); + const rawCallResult = await self._performCallAsync( + { ...callData, data: this.getABIEncodedTransactionData() }, + defaultBlock, + ); + const abiEncoder = self._lookupAbiEncoder(functionSignature); + return abiEncoder.strictDecodeReturnValue(rawCallResult); + }, + getABIEncodedTransactionData(): string { + return self._strictEncodeArguments(functionSignature, []); + }, + }; + } /** * Approves the respective proxy for a given asset to transfer tokens on the Forwarder contract's behalf. * This is necessary because an order fee denominated in the maker asset (i.e. a percentage fee) is sent by the @@ -536,10 +568,10 @@ export class ForwarderContract extends BaseContract { * makerAsset and WETH as takerAsset. * @param makerAssetBuyAmount Desired amount of makerAsset to purchase. * @param signatures Proofs that orders have been created by makers. - * @param feePercentage Percentage of WETH sold that will payed as fee to - * forwarding contract feeRecipient. - * @param feeRecipient Address that will receive ETH when orders are filled. - * @returns wethSpentAmount Amount of WETH spent on the given set of orders.makerAssetAcquiredAmount Amount of maker asset acquired from the given set of orders.ethFeePaid Amount of ETH spent on the given forwarder fee. + * @param ethFeeAmounts Amounts of ETH, denominated in Wei, that are paid to + * corresponding feeRecipients. + * @param feeRecipients Addresses that will receive ETH when orders are filled. + * @returns wethSpentAmount Amount of WETH spent on the given set of orders.makerAssetAcquiredAmount Amount of maker asset acquired from the given set of orders. */ public marketBuyOrdersWithEth( orders: Array<{ @@ -560,17 +592,17 @@ export class ForwarderContract extends BaseContract { }>, makerAssetBuyAmount: BigNumber, signatures: string[], - feePercentage: BigNumber, - feeRecipient: string, - ): ContractTxFunctionObj<[BigNumber, BigNumber, BigNumber]> { + ethFeeAmounts: BigNumber[], + feeRecipients: string[], + ): ContractTxFunctionObj<[BigNumber, BigNumber]> { const self = (this as any) as ForwarderContract; assert.isArray('orders', orders); assert.isBigNumber('makerAssetBuyAmount', makerAssetBuyAmount); assert.isArray('signatures', signatures); - assert.isBigNumber('feePercentage', feePercentage); - assert.isString('feeRecipient', feeRecipient); + assert.isArray('ethFeeAmounts', ethFeeAmounts); + assert.isArray('feeRecipients', feeRecipients); const functionSignature = - 'marketBuyOrdersWithEth((address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,bytes,bytes)[],uint256,bytes[],uint256,address)'; + 'marketBuyOrdersWithEth((address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,bytes,bytes)[],uint256,bytes[],uint256[],address[])'; return { async sendTransactionAsync( @@ -602,22 +634,22 @@ export class ForwarderContract extends BaseContract { async callAsync( callData: Partial = {}, defaultBlock?: BlockParam, - ): Promise<[BigNumber, BigNumber, BigNumber]> { + ): Promise<[BigNumber, BigNumber]> { BaseContract._assertCallParams(callData, defaultBlock); const rawCallResult = await self._performCallAsync( { ...callData, data: this.getABIEncodedTransactionData() }, defaultBlock, ); const abiEncoder = self._lookupAbiEncoder(functionSignature); - return abiEncoder.strictDecodeReturnValue<[BigNumber, BigNumber, BigNumber]>(rawCallResult); + return abiEncoder.strictDecodeReturnValue<[BigNumber, BigNumber]>(rawCallResult); }, getABIEncodedTransactionData(): string { return self._strictEncodeArguments(functionSignature, [ orders, makerAssetBuyAmount, signatures, - feePercentage, - feeRecipient.toLowerCase(), + ethFeeAmounts, + feeRecipients, ]); }, }; @@ -628,10 +660,10 @@ export class ForwarderContract extends BaseContract { * @param orders Array of order specifications used containing desired * makerAsset and WETH as takerAsset. * @param signatures Proofs that orders have been created by makers. - * @param feePercentage Percentage of WETH sold that will payed as fee to - * forwarding contract feeRecipient. - * @param feeRecipient Address that will receive ETH when orders are filled. - * @returns wethSpentAmount Amount of WETH spent on the given set of orders.makerAssetAcquiredAmount Amount of maker asset acquired from the given set of orders.ethFeePaid Amount of ETH spent on the given forwarder fee. + * @param ethFeeAmounts Amounts of ETH, denominated in Wei, that are paid to + * corresponding feeRecipients. + * @param feeRecipients Addresses that will receive ETH when orders are filled. + * @returns wethSpentAmount Amount of WETH spent on the given set of orders.makerAssetAcquiredAmount Amount of maker asset acquired from the given set of orders. */ public marketSellOrdersWithEth( orders: Array<{ @@ -651,16 +683,16 @@ export class ForwarderContract extends BaseContract { takerFeeAssetData: string; }>, signatures: string[], - feePercentage: BigNumber, - feeRecipient: string, - ): ContractTxFunctionObj<[BigNumber, BigNumber, BigNumber]> { + ethFeeAmounts: BigNumber[], + feeRecipients: string[], + ): ContractTxFunctionObj<[BigNumber, BigNumber]> { const self = (this as any) as ForwarderContract; assert.isArray('orders', orders); assert.isArray('signatures', signatures); - assert.isBigNumber('feePercentage', feePercentage); - assert.isString('feeRecipient', feeRecipient); + assert.isArray('ethFeeAmounts', ethFeeAmounts); + assert.isArray('feeRecipients', feeRecipients); const functionSignature = - 'marketSellOrdersWithEth((address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,bytes,bytes)[],bytes[],uint256,address)'; + 'marketSellOrdersWithEth((address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,bytes,bytes)[],bytes[],uint256[],address[])'; return { async sendTransactionAsync( @@ -692,21 +724,21 @@ export class ForwarderContract extends BaseContract { async callAsync( callData: Partial = {}, defaultBlock?: BlockParam, - ): Promise<[BigNumber, BigNumber, BigNumber]> { + ): Promise<[BigNumber, BigNumber]> { BaseContract._assertCallParams(callData, defaultBlock); const rawCallResult = await self._performCallAsync( { ...callData, data: this.getABIEncodedTransactionData() }, defaultBlock, ); const abiEncoder = self._lookupAbiEncoder(functionSignature); - return abiEncoder.strictDecodeReturnValue<[BigNumber, BigNumber, BigNumber]>(rawCallResult); + return abiEncoder.strictDecodeReturnValue<[BigNumber, BigNumber]>(rawCallResult); }, getABIEncodedTransactionData(): string { return self._strictEncodeArguments(functionSignature, [ orders, signatures, - feePercentage, - feeRecipient.toLowerCase(), + ethFeeAmounts, + feeRecipients, ]); }, }; @@ -730,6 +762,10 @@ export class ForwarderContract extends BaseContract { }, }; } + /** + * Change the owner of this contract. + * @param newOwner New owner address. + */ public transferOwnership(newOwner: string): ContractTxFunctionObj { const self = (this as any) as ForwarderContract; assert.isString('newOwner', newOwner); diff --git a/packages/contract-wrappers/src/generated-wrappers/staking.ts b/packages/contract-wrappers/src/generated-wrappers/staking.ts index 6af75ce79b..a9952207b3 100644 --- a/packages/contract-wrappers/src/generated-wrappers/staking.ts +++ b/packages/contract-wrappers/src/generated-wrappers/staking.ts @@ -180,8 +180,6 @@ export class StakingContract extends BaseContract { supportedProvider: SupportedProvider, txDefaults: Partial, logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }, - wethAddress: string, - zrxVaultAddress: string, ): Promise { assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema, [ schemas.addressSchema, @@ -200,15 +198,7 @@ export class StakingContract extends BaseContract { logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi; } } - return StakingContract.deployAsync( - bytecode, - abi, - provider, - txDefaults, - logDecodeDependenciesAbiOnly, - wethAddress, - zrxVaultAddress, - ); + return StakingContract.deployAsync(bytecode, abi, provider, txDefaults, logDecodeDependenciesAbiOnly); } public static async deployAsync( bytecode: string, @@ -216,8 +206,6 @@ export class StakingContract extends BaseContract { supportedProvider: SupportedProvider, txDefaults: Partial, logDecodeDependencies: { [contractName: string]: ContractAbi }, - wethAddress: string, - zrxVaultAddress: string, ): Promise { assert.isHexString('bytecode', bytecode); assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema, [ @@ -227,14 +215,10 @@ export class StakingContract extends BaseContract { ]); const provider = providerUtils.standardizeOrThrow(supportedProvider); const constructorAbi = BaseContract._lookupConstructorAbi(abi); - [wethAddress, zrxVaultAddress] = BaseContract._formatABIDataItemList( - constructorAbi.inputs, - [wethAddress, zrxVaultAddress], - BaseContract._bigNumberToString, - ); + [] = BaseContract._formatABIDataItemList(constructorAbi.inputs, [], BaseContract._bigNumberToString); const iface = new ethers.utils.Interface(abi); const deployInfo = iface.deployFunction; - const txData = deployInfo.encode(bytecode, [wethAddress, zrxVaultAddress]); + const txData = deployInfo.encode(bytecode, []); const web3Wrapper = new Web3Wrapper(provider); const txDataWithDefaults = await BaseContract._applyDefaultsToContractTxDataAsync( { @@ -253,7 +237,7 @@ export class StakingContract extends BaseContract { txDefaults, logDecodeDependencies, ); - contractInstance.constructorArgs = [wethAddress, zrxVaultAddress]; + contractInstance.constructorArgs = []; return contractInstance; } @@ -262,22 +246,6 @@ export class StakingContract extends BaseContract { */ public static ABI(): ContractAbi { const abi = [ - { - inputs: [ - { - name: 'wethAddress', - type: 'address', - }, - { - name: 'zrxVaultAddress', - type: 'address', - }, - ], - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'constructor', - }, { anonymous: false, inputs: [ @@ -2480,7 +2448,8 @@ export class StakingContract extends BaseContract { }; } /** - * Returns the current weth contract address + * An overridable way to access the deployed WETH contract. + * Must be view to allow overrides to access state. * @returns wethContract The WETH contract instance. */ public getWethContract(): ContractFunctionObj { @@ -2503,7 +2472,8 @@ export class StakingContract extends BaseContract { }; } /** - * Returns the current zrxVault address. + * An overridable way to access the deployed zrxVault. + * Must be view to allow overrides to access state. * @returns zrxVault The zrxVault contract. */ public getZrxVault(): ContractFunctionObj { @@ -2667,9 +2637,9 @@ export class StakingContract extends BaseContract { * Moves stake between statuses: 'undelegated' or 'delegated'. * Delegated stake can also be moved between pools. * This change comes into effect next epoch. - * @param from status to move stake out of. - * @param to status to move stake into. - * @param amount of stake to move. + * @param from Status to move stake out of. + * @param to Status to move stake into. + * @param amount Amount of stake to move. */ public moveStake( from: { status: number | BigNumber; poolId: string }, @@ -3120,7 +3090,7 @@ export class StakingContract extends BaseContract { /** * Stake ZRX tokens. Tokens are deposited into the ZRX Vault. * Unstake to retrieve the ZRX. Stake is in the 'Active' status. - * @param amount of ZRX to stake. + * @param amount Amount of ZRX to stake. */ public stake(amount: BigNumber): ContractTxFunctionObj { const self = (this as any) as StakingContract; @@ -3187,6 +3157,10 @@ export class StakingContract extends BaseContract { }, }; } + /** + * Change the owner of this contract. + * @param newOwner New owner address. + */ public transferOwnership(newOwner: string): ContractTxFunctionObj { const self = (this as any) as StakingContract; assert.isString('newOwner', newOwner); @@ -3237,7 +3211,7 @@ export class StakingContract extends BaseContract { * Unstake. Tokens are withdrawn from the ZRX Vault and returned to * the staker. Stake must be in the 'undelegated' status in both the * current and next epoch in order to be unstaked. - * @param amount of ZRX to unstake. + * @param amount Amount of ZRX to unstake. */ public unstake(amount: BigNumber): ContractTxFunctionObj { const self = (this as any) as StakingContract; diff --git a/packages/contract-wrappers/src/generated-wrappers/staking_proxy.ts b/packages/contract-wrappers/src/generated-wrappers/staking_proxy.ts index 52dadcb7ec..92159b5ec9 100644 --- a/packages/contract-wrappers/src/generated-wrappers/staking_proxy.ts +++ b/packages/contract-wrappers/src/generated-wrappers/staking_proxy.ts @@ -1399,6 +1399,10 @@ export class StakingProxyContract extends BaseContract { }, }; } + /** + * Change the owner of this contract. + * @param newOwner New owner address. + */ public transferOwnership(newOwner: string): ContractTxFunctionObj { const self = (this as any) as StakingProxyContract; assert.isString('newOwner', newOwner); diff --git a/packages/contract-wrappers/src/generated-wrappers/weth9.ts b/packages/contract-wrappers/src/generated-wrappers/weth9.ts index 4953081067..25e6aad296 100644 --- a/packages/contract-wrappers/src/generated-wrappers/weth9.ts +++ b/packages/contract-wrappers/src/generated-wrappers/weth9.ts @@ -36,14 +36,14 @@ import * as ethers from 'ethers'; export type WETH9EventArgs = | WETH9ApprovalEventArgs - | WETH9TransferEventArgs | WETH9DepositEventArgs + | WETH9TransferEventArgs | WETH9WithdrawalEventArgs; export enum WETH9Events { Approval = 'Approval', - Transfer = 'Transfer', Deposit = 'Deposit', + Transfer = 'Transfer', Withdrawal = 'Withdrawal', } @@ -53,14 +53,14 @@ export interface WETH9ApprovalEventArgs extends DecodedLogArgs { _value: BigNumber; } -export interface WETH9TransferEventArgs extends DecodedLogArgs { - _from: string; - _to: string; +export interface WETH9DepositEventArgs extends DecodedLogArgs { + _owner: string; _value: BigNumber; } -export interface WETH9DepositEventArgs extends DecodedLogArgs { - _owner: string; +export interface WETH9TransferEventArgs extends DecodedLogArgs { + _from: string; + _to: string; _value: BigNumber; } @@ -152,13 +152,111 @@ export class WETH9Contract extends BaseContract { public static ABI(): ContractAbi { const abi = [ { - constant: true, + anonymous: false, + inputs: [ + { + name: '_owner', + type: 'address', + indexed: true, + }, + { + name: '_spender', + type: 'address', + indexed: true, + }, + { + name: '_value', + type: 'uint256', + indexed: false, + }, + ], + name: 'Approval', + outputs: [], + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + name: '_owner', + type: 'address', + indexed: true, + }, + { + name: '_value', + type: 'uint256', + indexed: false, + }, + ], + name: 'Deposit', + outputs: [], + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + name: '_from', + type: 'address', + indexed: true, + }, + { + name: '_to', + type: 'address', + indexed: true, + }, + { + name: '_value', + type: 'uint256', + indexed: false, + }, + ], + name: 'Transfer', + outputs: [], + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + name: '_owner', + type: 'address', + indexed: true, + }, + { + name: '_value', + type: 'uint256', + indexed: false, + }, + ], + name: 'Withdrawal', + outputs: [], + type: 'event', + }, + { inputs: [], - name: 'name', + outputs: [], + payable: true, + stateMutability: 'payable', + type: 'fallback', + }, + { + constant: true, + inputs: [ + { + name: 'index_0', + type: 'address', + }, + { + name: 'index_1', + type: 'address', + }, + ], + name: 'allowance', outputs: [ { name: '', - type: 'string', + type: 'uint256', }, ], payable: false, @@ -188,6 +286,76 @@ export class WETH9Contract extends BaseContract { stateMutability: 'nonpayable', type: 'function', }, + { + constant: true, + inputs: [ + { + name: 'index_0', + type: 'address', + }, + ], + name: 'balanceOf', + outputs: [ + { + name: '', + type: 'uint256', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'decimals', + outputs: [ + { + name: '', + type: 'uint8', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: false, + inputs: [], + name: 'deposit', + outputs: [], + payable: true, + stateMutability: 'payable', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'name', + outputs: [ + { + name: '', + type: 'string', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, + { + constant: true, + inputs: [], + name: 'symbol', + outputs: [ + { + name: '', + type: 'string', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, { constant: true, inputs: [], @@ -202,6 +370,29 @@ export class WETH9Contract extends BaseContract { stateMutability: 'view', type: 'function', }, + { + constant: false, + inputs: [ + { + name: 'dst', + type: 'address', + }, + { + name: 'wad', + type: 'uint256', + }, + ], + name: 'transfer', + outputs: [ + { + name: '', + type: 'bool', + }, + ], + payable: false, + stateMutability: 'nonpayable', + type: 'function', + }, { constant: false, inputs: [ @@ -243,197 +434,6 @@ export class WETH9Contract extends BaseContract { stateMutability: 'nonpayable', type: 'function', }, - { - constant: true, - inputs: [], - name: 'decimals', - outputs: [ - { - name: '', - type: 'uint8', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - name: 'index_0', - type: 'address', - }, - ], - name: 'balanceOf', - outputs: [ - { - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'symbol', - outputs: [ - { - name: '', - type: 'string', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - name: 'dst', - type: 'address', - }, - { - name: 'wad', - type: 'uint256', - }, - ], - name: 'transfer', - outputs: [ - { - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [], - name: 'deposit', - outputs: [], - payable: true, - stateMutability: 'payable', - type: 'function', - }, - { - constant: true, - inputs: [ - { - name: 'index_0', - type: 'address', - }, - { - name: 'index_1', - type: 'address', - }, - ], - name: 'allowance', - outputs: [ - { - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - outputs: [], - payable: true, - stateMutability: 'payable', - type: 'fallback', - }, - { - anonymous: false, - inputs: [ - { - name: '_owner', - type: 'address', - indexed: true, - }, - { - name: '_spender', - type: 'address', - indexed: true, - }, - { - name: '_value', - type: 'uint256', - indexed: false, - }, - ], - name: 'Approval', - outputs: [], - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - name: '_from', - type: 'address', - indexed: true, - }, - { - name: '_to', - type: 'address', - indexed: true, - }, - { - name: '_value', - type: 'uint256', - indexed: false, - }, - ], - name: 'Transfer', - outputs: [], - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - name: '_owner', - type: 'address', - indexed: true, - }, - { - name: '_value', - type: 'uint256', - indexed: false, - }, - ], - name: 'Deposit', - outputs: [], - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - name: '_owner', - type: 'address', - indexed: true, - }, - { - name: '_value', - type: 'uint256', - indexed: false, - }, - ], - name: 'Withdrawal', - outputs: [], - type: 'event', - }, ] as ContractAbi; return abi; } @@ -465,22 +465,24 @@ export class WETH9Contract extends BaseContract { return abiEncoder.getSelector(); } - public name(): ContractFunctionObj { + public allowance(index_0: string, index_1: string): ContractFunctionObj { const self = (this as any) as WETH9Contract; - const functionSignature = 'name()'; + assert.isString('index_0', index_0); + assert.isString('index_1', index_1); + const functionSignature = 'allowance(address,address)'; return { - async callAsync(callData: Partial = {}, defaultBlock?: BlockParam): Promise { + async callAsync(callData: Partial = {}, defaultBlock?: BlockParam): Promise { BaseContract._assertCallParams(callData, defaultBlock); const rawCallResult = await self._performCallAsync( { ...callData, data: this.getABIEncodedTransactionData() }, defaultBlock, ); const abiEncoder = self._lookupAbiEncoder(functionSignature); - return abiEncoder.strictDecodeReturnValue(rawCallResult); + return abiEncoder.strictDecodeReturnValue(rawCallResult); }, getABIEncodedTransactionData(): string { - return self._strictEncodeArguments(functionSignature, []); + return self._strictEncodeArguments(functionSignature, [index_0.toLowerCase(), index_1.toLowerCase()]); }, }; } @@ -531,6 +533,128 @@ export class WETH9Contract extends BaseContract { }, }; } + public balanceOf(index_0: string): ContractFunctionObj { + const self = (this as any) as WETH9Contract; + assert.isString('index_0', index_0); + const functionSignature = 'balanceOf(address)'; + + return { + async callAsync(callData: Partial = {}, defaultBlock?: BlockParam): Promise { + BaseContract._assertCallParams(callData, defaultBlock); + const rawCallResult = await self._performCallAsync( + { ...callData, data: this.getABIEncodedTransactionData() }, + defaultBlock, + ); + const abiEncoder = self._lookupAbiEncoder(functionSignature); + return abiEncoder.strictDecodeReturnValue(rawCallResult); + }, + getABIEncodedTransactionData(): string { + return self._strictEncodeArguments(functionSignature, [index_0.toLowerCase()]); + }, + }; + } + public decimals(): ContractFunctionObj { + const self = (this as any) as WETH9Contract; + const functionSignature = 'decimals()'; + + return { + async callAsync(callData: Partial = {}, defaultBlock?: BlockParam): Promise { + BaseContract._assertCallParams(callData, defaultBlock); + const rawCallResult = await self._performCallAsync( + { ...callData, data: this.getABIEncodedTransactionData() }, + defaultBlock, + ); + const abiEncoder = self._lookupAbiEncoder(functionSignature); + return abiEncoder.strictDecodeReturnValue(rawCallResult); + }, + getABIEncodedTransactionData(): string { + return self._strictEncodeArguments(functionSignature, []); + }, + }; + } + public deposit(): ContractTxFunctionObj { + const self = (this as any) as WETH9Contract; + const functionSignature = 'deposit()'; + + return { + async sendTransactionAsync( + txData?: Partial | undefined, + opts: SendTransactionOpts = { shouldValidate: true }, + ): Promise { + const txDataWithDefaults = await self._applyDefaultsToTxDataAsync( + { ...txData, data: this.getABIEncodedTransactionData() }, + this.estimateGasAsync.bind(this), + ); + if (opts.shouldValidate !== false) { + await this.callAsync(txDataWithDefaults); + } + return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults); + }, + awaitTransactionSuccessAsync( + txData?: Partial, + opts: AwaitTransactionSuccessOpts = { shouldValidate: true }, + ): PromiseWithTransactionHash { + return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts); + }, + async estimateGasAsync(txData?: Partial | undefined): Promise { + const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({ + ...txData, + data: this.getABIEncodedTransactionData(), + }); + return self._web3Wrapper.estimateGasAsync(txDataWithDefaults); + }, + async callAsync(callData: Partial = {}, defaultBlock?: BlockParam): Promise { + BaseContract._assertCallParams(callData, defaultBlock); + const rawCallResult = await self._performCallAsync( + { ...callData, data: this.getABIEncodedTransactionData() }, + defaultBlock, + ); + const abiEncoder = self._lookupAbiEncoder(functionSignature); + return abiEncoder.strictDecodeReturnValue(rawCallResult); + }, + getABIEncodedTransactionData(): string { + return self._strictEncodeArguments(functionSignature, []); + }, + }; + } + public name(): ContractFunctionObj { + const self = (this as any) as WETH9Contract; + const functionSignature = 'name()'; + + return { + async callAsync(callData: Partial = {}, defaultBlock?: BlockParam): Promise { + BaseContract._assertCallParams(callData, defaultBlock); + const rawCallResult = await self._performCallAsync( + { ...callData, data: this.getABIEncodedTransactionData() }, + defaultBlock, + ); + const abiEncoder = self._lookupAbiEncoder(functionSignature); + return abiEncoder.strictDecodeReturnValue(rawCallResult); + }, + getABIEncodedTransactionData(): string { + return self._strictEncodeArguments(functionSignature, []); + }, + }; + } + public symbol(): ContractFunctionObj { + const self = (this as any) as WETH9Contract; + const functionSignature = 'symbol()'; + + return { + async callAsync(callData: Partial = {}, defaultBlock?: BlockParam): Promise { + BaseContract._assertCallParams(callData, defaultBlock); + const rawCallResult = await self._performCallAsync( + { ...callData, data: this.getABIEncodedTransactionData() }, + defaultBlock, + ); + const abiEncoder = self._lookupAbiEncoder(functionSignature); + return abiEncoder.strictDecodeReturnValue(rawCallResult); + }, + getABIEncodedTransactionData(): string { + return self._strictEncodeArguments(functionSignature, []); + }, + }; + } public totalSupply(): ContractFunctionObj { const self = (this as any) as WETH9Contract; const functionSignature = 'totalSupply()'; @@ -550,6 +674,53 @@ export class WETH9Contract extends BaseContract { }, }; } + public transfer(dst: string, wad: BigNumber): ContractTxFunctionObj { + const self = (this as any) as WETH9Contract; + assert.isString('dst', dst); + assert.isBigNumber('wad', wad); + const functionSignature = 'transfer(address,uint256)'; + + return { + async sendTransactionAsync( + txData?: Partial | undefined, + opts: SendTransactionOpts = { shouldValidate: true }, + ): Promise { + const txDataWithDefaults = await self._applyDefaultsToTxDataAsync( + { ...txData, data: this.getABIEncodedTransactionData() }, + this.estimateGasAsync.bind(this), + ); + if (opts.shouldValidate !== false) { + await this.callAsync(txDataWithDefaults); + } + return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults); + }, + awaitTransactionSuccessAsync( + txData?: Partial, + opts: AwaitTransactionSuccessOpts = { shouldValidate: true }, + ): PromiseWithTransactionHash { + return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts); + }, + async estimateGasAsync(txData?: Partial | undefined): Promise { + const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({ + ...txData, + data: this.getABIEncodedTransactionData(), + }); + return self._web3Wrapper.estimateGasAsync(txDataWithDefaults); + }, + async callAsync(callData: Partial = {}, defaultBlock?: BlockParam): Promise { + BaseContract._assertCallParams(callData, defaultBlock); + const rawCallResult = await self._performCallAsync( + { ...callData, data: this.getABIEncodedTransactionData() }, + defaultBlock, + ); + const abiEncoder = self._lookupAbiEncoder(functionSignature); + return abiEncoder.strictDecodeReturnValue(rawCallResult); + }, + getABIEncodedTransactionData(): string { + return self._strictEncodeArguments(functionSignature, [dst.toLowerCase(), wad]); + }, + }; + } public transferFrom(src: string, dst: string, wad: BigNumber): ContractTxFunctionObj { const self = (this as any) as WETH9Contract; assert.isString('src', src); @@ -644,177 +815,6 @@ export class WETH9Contract extends BaseContract { }, }; } - public decimals(): ContractFunctionObj { - const self = (this as any) as WETH9Contract; - const functionSignature = 'decimals()'; - - return { - async callAsync(callData: Partial = {}, defaultBlock?: BlockParam): Promise { - BaseContract._assertCallParams(callData, defaultBlock); - const rawCallResult = await self._performCallAsync( - { ...callData, data: this.getABIEncodedTransactionData() }, - defaultBlock, - ); - const abiEncoder = self._lookupAbiEncoder(functionSignature); - return abiEncoder.strictDecodeReturnValue(rawCallResult); - }, - getABIEncodedTransactionData(): string { - return self._strictEncodeArguments(functionSignature, []); - }, - }; - } - public balanceOf(index_0: string): ContractFunctionObj { - const self = (this as any) as WETH9Contract; - assert.isString('index_0', index_0); - const functionSignature = 'balanceOf(address)'; - - return { - async callAsync(callData: Partial = {}, defaultBlock?: BlockParam): Promise { - BaseContract._assertCallParams(callData, defaultBlock); - const rawCallResult = await self._performCallAsync( - { ...callData, data: this.getABIEncodedTransactionData() }, - defaultBlock, - ); - const abiEncoder = self._lookupAbiEncoder(functionSignature); - return abiEncoder.strictDecodeReturnValue(rawCallResult); - }, - getABIEncodedTransactionData(): string { - return self._strictEncodeArguments(functionSignature, [index_0.toLowerCase()]); - }, - }; - } - public symbol(): ContractFunctionObj { - const self = (this as any) as WETH9Contract; - const functionSignature = 'symbol()'; - - return { - async callAsync(callData: Partial = {}, defaultBlock?: BlockParam): Promise { - BaseContract._assertCallParams(callData, defaultBlock); - const rawCallResult = await self._performCallAsync( - { ...callData, data: this.getABIEncodedTransactionData() }, - defaultBlock, - ); - const abiEncoder = self._lookupAbiEncoder(functionSignature); - return abiEncoder.strictDecodeReturnValue(rawCallResult); - }, - getABIEncodedTransactionData(): string { - return self._strictEncodeArguments(functionSignature, []); - }, - }; - } - public transfer(dst: string, wad: BigNumber): ContractTxFunctionObj { - const self = (this as any) as WETH9Contract; - assert.isString('dst', dst); - assert.isBigNumber('wad', wad); - const functionSignature = 'transfer(address,uint256)'; - - return { - async sendTransactionAsync( - txData?: Partial | undefined, - opts: SendTransactionOpts = { shouldValidate: true }, - ): Promise { - const txDataWithDefaults = await self._applyDefaultsToTxDataAsync( - { ...txData, data: this.getABIEncodedTransactionData() }, - this.estimateGasAsync.bind(this), - ); - if (opts.shouldValidate !== false) { - await this.callAsync(txDataWithDefaults); - } - return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults); - }, - awaitTransactionSuccessAsync( - txData?: Partial, - opts: AwaitTransactionSuccessOpts = { shouldValidate: true }, - ): PromiseWithTransactionHash { - return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts); - }, - async estimateGasAsync(txData?: Partial | undefined): Promise { - const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({ - ...txData, - data: this.getABIEncodedTransactionData(), - }); - return self._web3Wrapper.estimateGasAsync(txDataWithDefaults); - }, - async callAsync(callData: Partial = {}, defaultBlock?: BlockParam): Promise { - BaseContract._assertCallParams(callData, defaultBlock); - const rawCallResult = await self._performCallAsync( - { ...callData, data: this.getABIEncodedTransactionData() }, - defaultBlock, - ); - const abiEncoder = self._lookupAbiEncoder(functionSignature); - return abiEncoder.strictDecodeReturnValue(rawCallResult); - }, - getABIEncodedTransactionData(): string { - return self._strictEncodeArguments(functionSignature, [dst.toLowerCase(), wad]); - }, - }; - } - public deposit(): ContractTxFunctionObj { - const self = (this as any) as WETH9Contract; - const functionSignature = 'deposit()'; - - return { - async sendTransactionAsync( - txData?: Partial | undefined, - opts: SendTransactionOpts = { shouldValidate: true }, - ): Promise { - const txDataWithDefaults = await self._applyDefaultsToTxDataAsync( - { ...txData, data: this.getABIEncodedTransactionData() }, - this.estimateGasAsync.bind(this), - ); - if (opts.shouldValidate !== false) { - await this.callAsync(txDataWithDefaults); - } - return self._web3Wrapper.sendTransactionAsync(txDataWithDefaults); - }, - awaitTransactionSuccessAsync( - txData?: Partial, - opts: AwaitTransactionSuccessOpts = { shouldValidate: true }, - ): PromiseWithTransactionHash { - return self._promiseWithTransactionHash(this.sendTransactionAsync(txData, opts), opts); - }, - async estimateGasAsync(txData?: Partial | undefined): Promise { - const txDataWithDefaults = await self._applyDefaultsToTxDataAsync({ - ...txData, - data: this.getABIEncodedTransactionData(), - }); - return self._web3Wrapper.estimateGasAsync(txDataWithDefaults); - }, - async callAsync(callData: Partial = {}, defaultBlock?: BlockParam): Promise { - BaseContract._assertCallParams(callData, defaultBlock); - const rawCallResult = await self._performCallAsync( - { ...callData, data: this.getABIEncodedTransactionData() }, - defaultBlock, - ); - const abiEncoder = self._lookupAbiEncoder(functionSignature); - return abiEncoder.strictDecodeReturnValue(rawCallResult); - }, - getABIEncodedTransactionData(): string { - return self._strictEncodeArguments(functionSignature, []); - }, - }; - } - public allowance(index_0: string, index_1: string): ContractFunctionObj { - const self = (this as any) as WETH9Contract; - assert.isString('index_0', index_0); - assert.isString('index_1', index_1); - const functionSignature = 'allowance(address,address)'; - - return { - async callAsync(callData: Partial = {}, defaultBlock?: BlockParam): Promise { - BaseContract._assertCallParams(callData, defaultBlock); - const rawCallResult = await self._performCallAsync( - { ...callData, data: this.getABIEncodedTransactionData() }, - defaultBlock, - ); - const abiEncoder = self._lookupAbiEncoder(functionSignature); - return abiEncoder.strictDecodeReturnValue(rawCallResult); - }, - getABIEncodedTransactionData(): string { - return self._strictEncodeArguments(functionSignature, [index_0.toLowerCase(), index_1.toLowerCase()]); - }, - }; - } /** * Subscribe to an event type emitted by the WETH9 contract. diff --git a/packages/contract-wrappers/src/index.ts b/packages/contract-wrappers/src/index.ts index f6915bbdda..12a154eece 100644 --- a/packages/contract-wrappers/src/index.ts +++ b/packages/contract-wrappers/src/index.ts @@ -27,6 +27,7 @@ export { ExchangeCancelUpToEventArgs, ExchangeAssetProxyRegisteredEventArgs, ExchangeContract, + ExchangeOwnershipTransferredEventArgs, ExchangeProtocolFeeCollectorAddressEventArgs, ExchangeProtocolFeeMultiplierEventArgs, ExchangeTransactionExecutionEventArgs, diff --git a/packages/dev-utils/CHANGELOG.json b/packages/dev-utils/CHANGELOG.json index 972ee97a2c..229285b037 100644 --- a/packages/dev-utils/CHANGELOG.json +++ b/packages/dev-utils/CHANGELOG.json @@ -1,4 +1,13 @@ [ + { + "version": "3.1.1", + "changes": [ + { + "note": "Set default `hardfork` option for ganache provider to `\"istanbul\"`", + "pr": 2432 + } + ] + }, { "version": "3.1.0", "changes": [ diff --git a/packages/dev-utils/src/web3_factory.ts b/packages/dev-utils/src/web3_factory.ts index 2ce3088175..114bdbaf48 100644 --- a/packages/dev-utils/src/web3_factory.ts +++ b/packages/dev-utils/src/web3_factory.ts @@ -25,7 +25,7 @@ export interface Web3Config { blockTime?: number; locked?: boolean; unlocked_accounts?: string[]; - hardfork?: string; + hardfork?: string; // default: istanbul } export const web3Factory = { @@ -82,7 +82,7 @@ export const web3Factory = { blockTime: config.blockTime, locked: config.locked, unlocked_accounts: config.unlocked_accounts, - hardfork: config.hardfork, + hardfork: config.hardfork || 'istanbul', } as any), // TODO remove any once types are merged in DefinitelyTyped ); } else { diff --git a/packages/migrations/CHANGELOG.json b/packages/migrations/CHANGELOG.json index bb75b573c9..968a215526 100644 --- a/packages/migrations/CHANGELOG.json +++ b/packages/migrations/CHANGELOG.json @@ -1,4 +1,13 @@ [ + { + "version": "6.0.0", + "changes": [ + { + "note": "Update Forwarder deployment", + "pr": 2432 + } + ] + }, { "version": "5.1.0", "changes": [ diff --git a/packages/migrations/src/migration.ts b/packages/migrations/src/migration.ts index e142a66188..a2f9808513 100644 --- a/packages/migrations/src/migration.ts +++ b/packages/migrations/src/migration.ts @@ -1,4 +1,4 @@ -import { ContractAddresses } from '@0x/contract-addresses'; +import { ContractAddresses, getContractAddressesForChainOrThrow } from '@0x/contract-addresses'; import * as artifacts from '@0x/contract-artifacts'; import { ForwarderContract } from '@0x/contract-wrappers'; import { @@ -15,7 +15,12 @@ import { ERC1155MintableContract } from '@0x/contracts-erc1155'; import { DummyERC20TokenContract, WETH9Contract } from '@0x/contracts-erc20'; import { DummyERC721TokenContract } from '@0x/contracts-erc721'; import { ExchangeContract } from '@0x/contracts-exchange'; -import { StakingProxyContract, TestStakingContract, ZrxVaultContract } from '@0x/contracts-staking'; +import { + artifacts as stakingArtifacts, + StakingProxyContract, + TestStakingContract, + ZrxVaultContract, +} from '@0x/contracts-staking'; import { Web3ProviderEngine } from '@0x/subproviders'; import { BigNumber, providerUtils } from '@0x/utils'; import { SupportedProvider, TxData } from 'ethereum-types'; @@ -204,7 +209,7 @@ export async function runMigrationsAsync( // Note we use TestStakingContract as the deployed bytecode of a StakingContract // has the tokens hardcoded const stakingLogic = await TestStakingContract.deployFrom0xArtifactAsync( - artifacts.Staking, + stakingArtifacts.TestStaking, provider, txDefaults, {}, @@ -237,12 +242,14 @@ export async function runMigrationsAsync( // Forwarder // Deployed after Exchange and Staking is configured as it queries // in the constructor + const { exchangeV2: exchangeV2Address } = getContractAddressesForChainOrThrow(chainId.toNumber()); const forwarder = await ForwarderContract.deployFrom0xArtifactAsync( artifacts.Forwarder, provider, txDefaults, artifacts, exchange.address, + exchangeV2Address || constants.NULL_ADDRESS, etherToken.address, ); @@ -257,12 +264,14 @@ export async function runMigrationsAsync( erc20BridgeProxy: erc20BridgeProxy.address, zeroExGovernor: constants.NULL_ADDRESS, forwarder: forwarder.address, + orderValidator: constants.NULL_ADDRESS, + dutchAuction: constants.NULL_ADDRESS, coordinatorRegistry: coordinatorRegistry.address, coordinator: coordinator.address, multiAssetProxy: multiAssetProxy.address, staticCallProxy: staticCallProxy.address, devUtils: devUtils.address, - exchangeV2: exchange.address, + exchangeV2: exchangeV2Address || constants.NULL_ADDRESS, zrxVault: zrxVault.address, staking: stakingLogic.address, stakingProxy: stakingProxy.address,