diff --git a/contracts/erc1155/package.json b/contracts/erc1155/package.json index ccedfe4692..2e039e52af 100644 --- a/contracts/erc1155/package.json +++ b/contracts/erc1155/package.json @@ -63,8 +63,8 @@ "@types/lodash": "4.14.104", "@types/mocha": "^5.2.7", "@types/node": "*", - "@0x/contracts-test-utils": "^3.2.0-beta.3", "@0x/typescript-typings": "^4.4.0-beta.2", + "@0x/contracts-test-utils": "^3.2.0-beta.3", "ethereum-types": "^2.2.0-beta.2", "chai": "^4.0.1", "chai-as-promised": "^7.1.0", diff --git a/contracts/erc1155/src/erc1155_wrapper.ts b/contracts/erc1155/src/erc1155_wrapper.ts index cf0916c29d..2017ac6b44 100644 --- a/contracts/erc1155/src/erc1155_wrapper.ts +++ b/contracts/erc1155/src/erc1155_wrapper.ts @@ -1,27 +1,19 @@ -import { LogDecoder } from '@0x/contracts-test-utils'; import { BigNumber } from '@0x/utils'; -import { Web3Wrapper } from '@0x/web3-wrapper'; import * as chai from 'chai'; import { LogWithDecodedArgs, Provider, TransactionReceiptWithDecodedLogs } from 'ethereum-types'; import * as _ from 'lodash'; import { ERC1155MintableContract, ERC1155TransferSingleEventArgs } from './wrappers'; -import { artifacts } from './artifacts'; - const expect = chai.expect; export class Erc1155Wrapper { private readonly _erc1155Contract: ERC1155MintableContract; - private readonly _web3Wrapper: Web3Wrapper; private readonly _contractOwner: string; - private readonly _logDecoder: LogDecoder; constructor(contractInstance: ERC1155MintableContract, provider: Provider, contractOwner: string) { this._erc1155Contract = contractInstance; - this._web3Wrapper = new Web3Wrapper(provider); this._contractOwner = contractOwner; - this._logDecoder = new LogDecoder(this._web3Wrapper, artifacts); } public getContract(): ERC1155MintableContract { return this._erc1155Contract; @@ -40,11 +32,11 @@ export class Erc1155Wrapper { ): Promise { const spender = delegatedSpender === undefined ? from : delegatedSpender; const callbackDataHex = callbackData === undefined ? '0x' : callbackData; - const tx = await this._logDecoder.getTxWithDecodedLogsAsync( - await this._erc1155Contract.safeTransferFrom(from, to, token, value, callbackDataHex).sendTransactionAsync({ + const tx = await this._erc1155Contract + .safeTransferFrom(from, to, token, value, callbackDataHex) + .awaitTransactionSuccessAsync({ from: spender, - }), - ); + }); return tx; } public async safeBatchTransferFromAsync( @@ -57,11 +49,9 @@ export class Erc1155Wrapper { ): Promise { const spender = delegatedSpender === undefined ? from : delegatedSpender; const callbackDataHex = callbackData === undefined ? '0x' : callbackData; - const tx = await this._logDecoder.getTxWithDecodedLogsAsync( - await this._erc1155Contract - .safeBatchTransferFrom(from, to, tokens, values, callbackDataHex) - .sendTransactionAsync({ from: spender }), - ); + const tx = await this._erc1155Contract + .safeBatchTransferFrom(from, to, tokens, values, callbackDataHex) + .awaitTransactionSuccessAsync({ from: spender }); return tx; } public async mintFungibleTokensAsync( @@ -70,11 +60,9 @@ export class Erc1155Wrapper { ): Promise { const tokenUri = 'dummyFungibleToken'; const tokenIsNonFungible = false; - const tx = await this._logDecoder.getTxWithDecodedLogsAsync( - await this._erc1155Contract.create(tokenUri, tokenIsNonFungible).sendTransactionAsync({ - from: this._contractOwner, - }), - ); + const tx = await this._erc1155Contract.create(tokenUri, tokenIsNonFungible).awaitTransactionSuccessAsync({ + from: this._contractOwner, + }); // tslint:disable-next-line no-unnecessary-type-assertion const createFungibleTokenLog = tx.logs[0] as LogWithDecodedArgs; const tokenId = createFungibleTokenLog.args.id; @@ -99,11 +87,9 @@ export class Erc1155Wrapper { public async mintNonFungibleTokensAsync(beneficiaries: string[]): Promise<[BigNumber, BigNumber[]]> { const tokenUri = 'dummyNonFungibleToken'; const tokenIsNonFungible = true; - const tx = await this._logDecoder.getTxWithDecodedLogsAsync( - await this._erc1155Contract.create(tokenUri, tokenIsNonFungible).sendTransactionAsync({ - from: this._contractOwner, - }), - ); + const tx = await this._erc1155Contract.create(tokenUri, tokenIsNonFungible).awaitTransactionSuccessAsync({ + from: this._contractOwner, + }); // tslint:disable-next-line no-unnecessary-type-assertion const createFungibleTokenLog = tx.logs[0] as LogWithDecodedArgs; const token = createFungibleTokenLog.args.id; @@ -125,11 +111,9 @@ export class Erc1155Wrapper { beneficiary: string, isApproved: boolean, ): Promise { - const tx = await this._logDecoder.getTxWithDecodedLogsAsync( - await this._erc1155Contract.setApprovalForAll(beneficiary, isApproved).sendTransactionAsync({ - from: owner, - }), - ); + const tx = await this._erc1155Contract.setApprovalForAll(beneficiary, isApproved).awaitTransactionSuccessAsync({ + from: owner, + }); return tx; } public async isApprovedForAllAsync(owner: string, beneficiary: string): Promise { diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/dev_utils.ts b/packages/abi-gen-wrappers/src/generated-wrappers/dev_utils.ts index 09b080e3b0..793ed00c3e 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/dev_utils.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/dev_utils.ts @@ -40,7 +40,7 @@ export class DevUtilsContract extends BaseContract { * @ignore */ public static deployedBytecode = - '0x608060405234801561001057600080fd5b50600436106102c85760003560e01c80639a7e75261161017b578063cafd3a07116100d8578063d46950281161008c578063e4e6e7da11610071578063e4e6e7da14610711578063e77286eb14610732578063ee4f5a9414610754576102c8565b8063d4695028146106cf578063e25cabf7146106ef576102c8565b8063d186037f116100bd578063d186037f14610689578063d36379051461069c578063d3d862d1146106bc576102c8565b8063cafd3a0714610655578063d001c5dc14610676576102c8565b8063acaedc741161012f578063bbb2dcf611610114578063bbb2dcf6146105ef578063bc03f96414610611578063ca49f47c14610632576102c8565b8063acaedc74146105b9578063b43cffe1146105dc576102c8565b8063a0901e5111610160578063a0901e5114610573578063a5cd62ba14610586578063a6627e9f146105a6576102c8565b80639a7e75261461052c5780639eadc8351461054f576102c8565b806346eb65cb116102295780636f83188e116101dd5780637b66ad34116101c25780637b66ad34146104e55780637d727512146105065780638f4ce47914610519576102c8565b80636f83188e146104a15780637914b2ec146104c4576102c8565b8063590aa8751161020e578063590aa8751461044c57806363eb39921461046c578063651290421461047f576102c8565b806346eb65cb146104175780634dfdac201461042c576102c8565b8063314853ff1161028057806332aae3ad1161026557806332aae3ad146103b15780633db6dc61146103d3578063459be5e2146103f6576102c8565b8063314853ff1461037c578063327d30541461039e576102c8565b80630d7b7d76116102b15780630d7b7d7614610319578063165979e11461033a5780632322cf761461035c576102c8565b806302d0aec3146102cd57806304a5618a146102f7575b600080fd5b6102e06102db366004614f2d565b610776565b6040516102ee929190615836565b60405180910390f35b61030a610305366004614f2d565b6107d2565b6040516102ee93929190615931565b61032c610327366004614a5e565b610880565b6040516102ee9291906157e4565b61034d610348366004614f2d565b6108a2565b6040516102ee93929190615a6e565b61036f61036a366004614a5e565b6108ff565b6040516102ee9190615cdc565b61038f61038a366004614f2d565b610927565b6040516102ee9392919061580b565b61032c6103ac366004614f2d565b61096e565b6103c46103bf366004614f2d565b6109b0565b6040516102ee939291906159e2565b6103e66103e1366004614f2d565b610a03565b6040516102ee94939291906157aa565b610409610404366004614f2d565b610a4d565b6040516102ee929190615a56565b61042a610425366004614f2d565b610aa3565b005b61043f61043a366004614985565b610c36565b6040516102ee9190615744565b61045f61045a3660046147fe565b610cb9565b6040516102ee9190615991565b61045f61047a366004614aa2565b610d3d565b61049261048d366004614f2d565b610dc8565b6040516102ee93929190615511565b6104b46104af366004614f2d565b610e02565b6040516102ee9493929190615ae0565b6104d76104d2366004614f2d565b611943565b6040516102ee929190615868565b6104f86104f3366004614f2d565b61197b565b6040516102ee9291906154f7565b61036f610514366004614a5e565b6119b3565b6104d7610527366004614f2d565b6120c8565b61053f61053a366004614f2d565b612158565b6040516102ee9493929190615a9c565b61056261055d366004614f2d565b6121b9565b6040516102ee95949392919061588b565b61043f610581366004614b24565b612264565b610599610594366004614b8a565b6122dd565b6040516102ee919061565d565b61045f6105b4366004614af9565b6123a0565b6105cc6105c7366004614f2d565b612427565b6040516102ee94939291906155b9565b61045f6105ea3660046149d3565b612463565b6106026105fd366004614f2d565b6124f0565b6040516102ee9392919061595c565b61062461061f366004614f2d565b61259d565b6040516102ee9291906157f2565b610645610640366004614f2d565b6125d6565b6040516102ee94939291906158ee565b610668610663366004614f2d565b612687565b6040516102ee929190615ad3565b61043f610684366004614985565b6126d5565b61036f610697366004614a5e565b612743565b6106af6106aa366004614fe4565b612d86565b6040516102ee9190615a89565b61045f6106ca366004614d32565b613323565b6106e26106dd366004614f2d565b61335b565b6040516102ee9190615853565b6107026106fd366004614c0e565b6134a7565b6040516102ee939291906156a9565b61072461071f366004614985565b6135df565b6040516102ee929190615785565b61074561074036600461503c565b6135f8565b6040516102ee93929190615c80565b610767610762366004614f2d565b613832565b6040516102ee93929190615a2c565b60008061078a8361078561386f565b613893565b60006107a360048551866138ed9092919063ffffffff16565b8060200190516107b69190810190614ee0565b909350905060ff811660068111156107ca57fe5b915050915091565b600080806107e6848263ffffffff61393016565b92506001600160e01b031983167f025717920000000000000000000000000000000000000000000000000000000014610854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615c49565b60405180910390fd5b61086584601063ffffffff61396416565b915061087884602463ffffffff61399716565b929491935050565b60008061088d84846119b3565b91506108998484612743565b90509250929050565b60008060006108b3846107856139a3565b60006108cc60048651876138ed9092919063ffffffff16565b8060200190516108df9190810190615270565b9094509250905060ff811660028111156108f557fe5b9350509193909250565b600080600061090e8585610880565b9150915061091c82826139c7565b925050505b92915050565b6000606080610938846107856139dd565b835161094e90859060049063ffffffff6138ed16565b8060200190516109619190810190614e80565b9196909550909350915050565b60008061097d83610785613a01565b825161099390849060049063ffffffff6138ed16565b8060200190516109a69190810190614e22565b9094909350915050565b60008060606109c184610785613a25565b60006109da60048651876138ed9092919063ffffffff16565b8060200190516109ed9190810190615224565b9094509250905060ff811660018111156108f557fe5b600080606080610a1585610785613a49565b8451610a2b90869060049063ffffffff6138ed16565b806020019051610a3e9190810190614dde565b92989197509550909350915050565b600080610a5c83610785613a6d565b6000610a7560048551866138ed9092919063ffffffff16565b806020019051610a889190810190615157565b9250905060ff81166003811115610a9b57fe5b925050915091565b6000610ab5828263ffffffff61393016565b90506001600160e01b031981167ff47261b0000000000000000000000000000000000000000000000000000000001415610af957610af2826120c8565b5050610c32565b6001600160e01b031981167f02571792000000000000000000000000000000000000000000000000000000001415610b3c57610b34826107d2565b505050610c32565b6001600160e01b031981167fa7cb5fb7000000000000000000000000000000000000000000000000000000001415610b8157610b77826121b9565b5050505050610c32565b6001600160e01b031981167f94cfcdd7000000000000000000000000000000000000000000000000000000001415610bbc57610b34826124f0565b6001600160e01b031981167fc339d10a000000000000000000000000000000000000000000000000000000001415610c0057610bf7826125d6565b50505050610c32565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615c49565b5050565b606060008251905080604051908082528060200260200182016040528015610c68578160200160208202803883390190505b50915060005b818114610cb157610c9285858381518110610c8557fe5b6020026020010151612743565b838281518110610c9e57fe5b6020908102919091010152600101610c6e565b505092915050565b6040516060907ff47261b00000000000000000000000000000000000000000000000000000000090610cef9084906024016154e3565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b0319909316929092179091529050919050565b6040516060907fc339d10a0000000000000000000000000000000000000000000000000000000090610d7790869086908690602401615587565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b03199093169290921790915290505b9392505050565b6000806000610dd984610785613a91565b8351610def90859060049063ffffffff6138ed16565b8060200190516109619190810190614853565b60608080806000610e19868263ffffffff61393016565b90506001600160e01b031981167fdedfc1f1000000000000000000000000000000000000000000000000000000001415610e8a576040518060400160405280601181526020017f626174636843616e63656c4f72646572730000000000000000000000000000008152509450611419565b6001600160e01b031981167f9694a402000000000000000000000000000000000000000000000000000000001415610ef9576040518060400160405280600f81526020017f626174636846696c6c4f726465727300000000000000000000000000000000008152509450611419565b6001600160e01b031981167f8ea8dfe4000000000000000000000000000000000000000000000000000000001415610f68576040518060400160405280601681526020017f626174636846696c6c4f72646572734e6f5468726f77000000000000000000008152509450611419565b6001600160e01b031981167fbeee2e14000000000000000000000000000000000000000000000000000000001415610fd7576040518060400160405280601581526020017f626174636846696c6c4f724b696c6c4f726465727300000000000000000000008152509450611419565b6001600160e01b031981167f2da62987000000000000000000000000000000000000000000000000000000001415611046576040518060400160405280600b81526020017f63616e63656c4f726465720000000000000000000000000000000000000000008152509450611419565b6001600160e01b031981167f9b44d5560000000000000000000000000000000000000000000000000000000014156110b5576040518060400160405280600981526020017f66696c6c4f7264657200000000000000000000000000000000000000000000008152509450611419565b6001600160e01b031981167fe14b58c4000000000000000000000000000000000000000000000000000000001415611124576040518060400160405280600f81526020017f66696c6c4f724b696c6c4f7264657200000000000000000000000000000000008152509450611419565b6001600160e01b031981167f78d29ac1000000000000000000000000000000000000000000000000000000001415611193576040518060400160405280601681526020017f6d61726b65744275794f72646572734e6f5468726f77000000000000000000008152509450611419565b6001600160e01b031981167f369da099000000000000000000000000000000000000000000000000000000001415611202576040518060400160405280601781526020017f6d61726b657453656c6c4f72646572734e6f5468726f770000000000000000008152509450611419565b6001600160e01b031981167f8bc8efb3000000000000000000000000000000000000000000000000000000001415611271576040518060400160405280601981526020017f6d61726b65744275794f726465727346696c6c4f724b696c6c000000000000008152509450611419565b6001600160e01b031981167fa6c3bf330000000000000000000000000000000000000000000000000000000014156112e0576040518060400160405280601a81526020017f6d61726b657453656c6c4f726465727346696c6c4f724b696c6c0000000000008152509450611419565b6001600160e01b031981167f88ec79fb00000000000000000000000000000000000000000000000000000000141561134f576040518060400160405280600b81526020017f6d617463684f72646572730000000000000000000000000000000000000000008152509450611419565b6001600160e01b031981167f4f9559b10000000000000000000000000000000000000000000000000000000014806113b057506001600160e01b031981167f2280c91000000000000000000000000000000000000000000000000000000000145b156113e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615bdb565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615ba4565b6001600160e01b031981167fdedfc1f10000000000000000000000000000000000000000000000000000000014156114be57855161146190879060049063ffffffff613ab516565b8060200190516114749190810190614b57565b604080516000808252602082019092529195505b50604080516000808252602082019092529194506114b6565b60608152602001906001900390816114a15790505b50915061193b565b6001600160e01b031981167fbeee2e1400000000000000000000000000000000000000000000000000000000148061151f57506001600160e01b031981167f9694a40200000000000000000000000000000000000000000000000000000000145b8061155357506001600160e01b031981167f8ea8dfe400000000000000000000000000000000000000000000000000000000145b1561156d5761156186613b35565b9195509350915061193b565b6001600160e01b031981167f2da629870000000000000000000000000000000000000000000000000000000014156116555760408051600180825281830190925290816020015b6115bc614131565b8152602001906001900390816115b457505086519094506115e790879060049063ffffffff613ab516565b8060200190516115fa9190810190614fb1565b8460008151811061160757fe5b602002602001018190525060006040519080825280602002602001820160405280156114885781602001602082028038833901905050604080516000808252602082019092529194506114b6565b6001600160e01b031981167fe14b58c40000000000000000000000000000000000000000000000000000000014806116b657506001600160e01b031981167f9b44d55600000000000000000000000000000000000000000000000000000000145b156116c45761156186613b64565b6001600160e01b031981167f78d29ac100000000000000000000000000000000000000000000000000000000148061172557506001600160e01b031981167f369da09900000000000000000000000000000000000000000000000000000000145b8061175957506001600160e01b031981167f8bc8efb300000000000000000000000000000000000000000000000000000000145b8061178d57506001600160e01b031981167fa6c3bf3300000000000000000000000000000000000000000000000000000000145b1561179b5761156186613c5e565b6001600160e01b031981167f88ec79fb00000000000000000000000000000000000000000000000000000000141561193b576117d5614131565b6117dd614131565b6060806117f760048b518c613ab59092919063ffffffff16565b80602001905161180a9190810190615093565b604080516002808252606082019092529498509296509094509250816020015b611832614131565b81526020019060019003908161182a579050509750838860008151811061185557fe5b6020026020010181905250828860018151811061186e57fe5b602090810291909101015260408051600280825260608201909252908160200160208202803883390190505096508360a00151876000815181106118ae57fe5b6020026020010181815250508260a00151876001815181106118cc57fe5b60209081029190910101526040805160028082526060820190925290816020015b60608152602001906001900390816118ed579050509550818660008151811061191257fe5b6020026020010181905250808660018151811061192b57fe5b6020026020010181905250505050505b509193509193565b60008061195283610785613cd2565b825161196890849060049063ffffffff6138ed16565b8060200190516109a69190810190614f04565b60008061198a83610785613cf6565b82516119a090849060049063ffffffff6138ed16565b8060200190516109a6919081019061481a565b6000806119c6838263ffffffff61393016565b90506001600160e01b031981167ff47261b0000000000000000000000000000000000000000000000000000000001415611b3b576000611a0d84601063ffffffff61396416565b6040519091506060907f70a082310000000000000000000000000000000000000000000000000000000090611a469088906024016154e3565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060006060836001600160a01b031683604051611ac191906154c7565b600060405180830381855afa9150503d8060008114611afc576040519150601f19603f3d011682016040523d82523d6000602084013e611b01565b606091505b5091509150818015611b14575080516020145b611b1f576000611b30565b611b3081600063ffffffff61399716565b9550505050506120c1565b6001600160e01b031981167f02571792000000000000000000000000000000000000000000000000000000001415611cd657600080611b79856107d2565b6040519194509250606091507f6352211e0000000000000000000000000000000000000000000000000000000090611bb5908490602401615cdc565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060006060846001600160a01b031683604051611c3091906154c7565b600060405180830381855afa9150503d8060008114611c6b576040519150601f19603f3d011682016040523d82523d6000602084013e611c70565b606091505b50915091506000828015611c85575081516020145b611c90576000611ca1565b611ca182600c63ffffffff61396416565b9050896001600160a01b0316816001600160a01b031614611cc3576000611cc6565b60015b60ff1697505050505050506120c1565b6001600160e01b031981167fa7cb5fb7000000000000000000000000000000000000000000000000000000001415611eb9576000606080611d16866121b9565b5081519296509094509250905060005b818114611eaf5783516060907efdd58e00000000000000000000000000000000000000000000000000000000908b90879085908110611d6157fe5b6020026020010151604051602401611d7a9291906155ed565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060006060876001600160a01b031683604051611df591906154c7565b600060405180830381855afa9150503d8060008114611e30576040519150601f19603f3d011682016040523d82523d6000602084013e611e35565b606091505b50915091506000828015611e4a575081516020145b611e55576000611e66565b611e6682600063ffffffff61399716565b90506000878681518110611e7657fe5b60200260200101518281611e8657fe5b0490508b811080611e9557508b155b15611e9e57809b505b505060019093019250611d26915050565b50505050506120c1565b6001600160e01b031981167fc339d10a00000000000000000000000000000000000000000000000000000000141561200a576040516060907fa85e59e40000000000000000000000000000000000000000000000000000000090611f28908690600090819081906024016159a4565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b03199094169390931790925260045491519092506000916001600160a01b031690611f8f9084906154c7565b600060405180830381855afa9150503d8060008114611fca576040519150601f19603f3d011682016040523d82523d6000602084013e611fcf565b606091505b5050905080611fdf576000612001565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b935050506120c1565b6001600160e01b031981167f94cfcdd70000000000000000000000000000000000000000000000000000000014156120c157606080612048856124f0565b80519194509250905060005b8181146120bc57600061207a8985848151811061206d57fe5b60200260200101516119b3565b9050600085838151811061208a57fe5b6020026020010151828161209a57fe5b049050878110806120a9575087155b156120b2578097505b5050600101612054565b505050505b5092915050565b6000806120db838263ffffffff61393016565b91506001600160e01b031982167ff47261b00000000000000000000000000000000000000000000000000000000014612140576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615c49565b61215183601063ffffffff61396416565b9050915091565b6000806000606061216b85610785613d1a565b600061218460048751886138ed9092919063ffffffff16565b80602001905161219791908101906151c6565b91965094509250905060ff811660068111156121af57fe5b9450509193509193565b600080606080806121d0868563ffffffff61393016565b94506001600160e01b031985167fa7cb5fb70000000000000000000000000000000000000000000000000000000014612235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615c49565b505050506024828101516044840151606485015160848601519496929591820184019490820184019391010190565b6060808251604051908082528060200260200182016040528015612292578160200160208202803883390190505b50905060005b835181146120c1578381815181106122ac57fe5b60200260200101516001600160a01b0316318282815181106122ca57fe5b6020908102919091010152600101612298565b60606000845190508060405190808252806020026020018201604052801561230f578160200160208202803883390190505b50915060005b8181146123975761236086828151811061232b57fe5b602002602001015186838151811061233f57fe5b602002602001015186848151811061235357fe5b6020026020010151612d86565b83828151811061236c57fe5b6020026020010190600481111561237f57fe5b9081600481111561238c57fe5b905250600101612315565b50509392505050565b6040516060907f0257179200000000000000000000000000000000000000000000000000000000906123d890859085906024016155ed565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b031990931692909217909152905092915050565b6000606080606061243a85610785613d3e565b845161245090869060049063ffffffff6138ed16565b806020019051610a3e91908101906148ed565b6040516060907fa7cb5fb7000000000000000000000000000000000000000000000000000000009061249f908790879087908790602401615535565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b0319909316929092179091529050949350505050565b6000606080612505848463ffffffff61393016565b92506001600160e01b031983167f94cfcdd7000000000000000000000000000000000000000000000000000000001461256a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615c49565b835161258090859060049063ffffffff613ab516565b8060200190516125939190810190614d67565b9395909450915050565b600060606125ad83610785613d62565b82516125c390849060049063ffffffff6138ed16565b8060200190516109a69190810190614e45565b6000806060816125ec858263ffffffff61393016565b93506001600160e01b031984167fc339d10a0000000000000000000000000000000000000000000000000000000014612651576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615c49565b845161266790869060049063ffffffff613ab516565b80602001905161267a9190810190614895565b9597919650949350915050565b60008061269683610785613d86565b60006126af60048551866138ed9092919063ffffffff16565b8060200190516126c29190810190615157565b9250905060ff81166001811115610a9b57fe5b606060008251905080604051908082528060200260200182016040528015612707578160200160208202803883390190505b50915060005b818114610cb1576127248585838151811061206d57fe5b83828151811061273057fe5b602090810291909101015260010161270d565b600080612756838263ffffffff61393016565b90506001600160e01b031981167f94cfcdd700000000000000000000000000000000000000000000000000000000141561280857606080612796856124f0565b80519194509250905060005b8181146127fd5760006127bb89858481518110610c8557fe5b905060008583815181106127cb57fe5b602002602001015182816127db57fe5b049050878110806127ea575087155b156127f3578097505b50506001016127a2565b506109219350505050565b6001600160e01b031981167ff47261b000000000000000000000000000000000000000000000000000000000141561289357600061284d84601063ffffffff61396416565b6001546040519192506060917fdd62ed3e0000000000000000000000000000000000000000000000000000000091611a469189916001600160a01b0316906024016154f7565b6001600160e01b031981167f02571792000000000000000000000000000000000000000000000000000000001415612b83576000806128d1856107d2565b600254604051929550909350606092507fe985e9c5000000000000000000000000000000000000000000000000000000009161291d918a916001600160a01b03909116906024016154f7565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060006060846001600160a01b03168360405161299891906154c7565b600060405180830381855afa9150503d80600081146129d3576040519150601f19603f3d011682016040523d82523d6000602084013e6129d8565b606091505b50915091508115806129ec57508051602014155b80612a085750612a0381600063ffffffff61399716565b600114155b15612b56576040516060907f081812fc0000000000000000000000000000000000000000000000000000000090612a43908790602401615cdc565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050856001600160a01b031681604051612aba91906154c7565b600060405180830381855afa9150503d8060008114612af5576040519150601f19603f3d011682016040523d82523d6000602084013e612afa565b606091505b509093509150828015612b0e575081516020145b8015612b3d57506002546001600160a01b0316612b3283600c63ffffffff61396416565b6001600160a01b0316145b612b48576000612b4b565b60015b60ff16975050611eaf565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff965050505050506120c1565b6001600160e01b031981167fa7cb5fb7000000000000000000000000000000000000000000000000000000001415612d2b576000612bc0846121b9565b5050600354604051929450606093507fe985e9c50000000000000000000000000000000000000000000000000000000092612c0a925089916001600160a01b0316906024016154f7565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060006060836001600160a01b031683604051612c8591906154c7565b600060405180830381855afa9150503d8060008114612cc0576040519150601f19603f3d011682016040523d82523d6000602084013e612cc5565b606091505b5091509150818015612cd8575080516020145b8015612cf45750612cf081600063ffffffff61399716565b6001145b612cff576000611b30565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9550505050506120c1565b6001600160e01b031981167fc339d10a0000000000000000000000000000000000000000000000000000000014156120c157507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9392505050565b6000612d906141c4565b612e218584600560009054906101000a90046001600160a01b03166001600160a01b0316631ce4c78b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612de357600080fd5b505afa158015612df7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612e1b919081019061513f565b3a613daa565b60408051600480825260a0820190925291925060609190816020015b6060815260200190600190039081612e3d57505060408051600480825260a082019092529192506060919060208201608080388339505060408051600480825260a08201909252929350606092915060208201608080388339505060408051600480825260a0820190925292935060609291506020820160808038833901905050905088610160015184600081518110612ed357fe5b60200260200101819052508783600081518110612eec57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050886000015182600081518110612f1e57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508681600081518110612f4c57fe5b60200260200101818152505088610140015184600181518110612f6b57fe5b6020026020010181905250886000015183600181518110612f8857fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508782600181518110612fb657fe5b60200260200101906001600160a01b031690816001600160a01b031681525050846000015181600181518110612fe857fe5b602002602001018181525050886101a001518460028151811061300757fe5b6020026020010181905250878360028151811061302057fe5b60200260200101906001600160a01b031690816001600160a01b03168152505088604001518260028151811061305257fe5b60200260200101906001600160a01b031690816001600160a01b03168152505084606001518160028151811061308457fe5b602002602001018181525050886101800151846003815181106130a357fe5b60200260200101819052508860000151836003815181106130c057fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508860400151826003815181106130f257fe5b60200260200101906001600160a01b031690816001600160a01b03168152505084604001518160038151811061312457fe5b60209081029190910101526040516060907fb04fbddd000000000000000000000000000000000000000000000000000000009061316b908790879087908790602401615606565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b03199094169390931790925260055491519092506060916001600160a01b0316906131d29084906154c7565b6000604051808303816000865af19150503d806000811461320f576040519150601f19603f3d011682016040523d82523d6000602084013e613214565b606091505b5091506000905061322b828263ffffffff61393016565b9050613235613a25565b6001600160e01b031982811691161415613277576000613254836109b0565b5091505060ff8116600481111561326757fe5b9950505050505050505050610dc1565b61327f6139dd565b6001600160e01b0319828116911614156132b257600061329e83610927565b509091505060ff8116600481111561326757fe5b815160208301207ff43f26ea5a94b478394a975e856464913dc1a8a1ca70939d974aa7c238aa0ce014156132f157600498505050505050505050610dc1565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615b6d565b6040516060907f94cfcdd700000000000000000000000000000000000000000000000000000000906123d89085908590602401615757565b600061336d828263ffffffff61393016565b90506001600160e01b031981167ff47261b00000000000000000000000000000000000000000000000000000000014806133d057506001600160e01b031981167f0257179200000000000000000000000000000000000000000000000000000000145b8061340457506001600160e01b031981167fa7cb5fb700000000000000000000000000000000000000000000000000000000145b8061343857506001600160e01b031981167f94cfcdd700000000000000000000000000000000000000000000000000000000145b8061346c57506001600160e01b031981167fc339d10a00000000000000000000000000000000000000000000000000000000145b6134a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615c49565b919050565b6060806060600085519050806040519080825280602002602001820160405280156134ec57816020015b6134d96141f3565b8152602001906001900390816134d15790505b50935080604051908082528060200260200182016040528015613519578160200160208202803883390190505b50925080604051908082528060200260200182016040528015613546578160200160208202803883390190505b50915060005b8181146135d65761358387828151811061356257fe5b602002602001015187838151811061357657fe5b60200260200101516135f8565b875188908590811061359157fe5b602002602001018785815181106135a457fe5b602002602001018786815181106135b757fe5b931515602094850291909101909301929092529190525260010161354c565b50509250925092565b6060806135ec84846126d5565b91506108998484610c36565b6136006141f3565b600080546040517f9d3fa4b900000000000000000000000000000000000000000000000000000000815282916001600160a01b031690639d3fa4b99061364a908890600401615ca4565b60606040518083038186803b15801561366257600080fd5b505afa158015613676573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061369a9190810190614f60565b85516000546040517fa12dcc6f00000000000000000000000000000000000000000000000000000000815292955090916001600160a01b039091169063a12dcc6f906136ec9089908990600401615cb7565b60206040518083038186803b15801561370457600080fd5b505afa158015613718573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061373c9190810190614dbe565b9150600061374f828861014001516108ff565b60a088015160c08901516101808a01516101408b01519394509192909160009161377e9163ffffffff613e2116565b156137ab576137a48461379e848d60800151613e4690919063ffffffff16565b85613e62565b9050613804565b816137bf576137a4848b6080015185613e62565b60006137d0868c61018001516108ff565b905060006137e3868d6080015187613e62565b905060006137f2838688613e62565b90506137fe82826139c7565b93505050505b61382461381e896040015185613e8c90919063ffffffff16565b826139c7565b965050505050509250925092565b600080600061384384610785613eab565b600061385c60048651876138ed9092919063ffffffff16565b8060200190516108df9190810190615184565b7ffdb6ca8d0000000000000000000000000000000000000000000000000000000090565b60006138a0836000613930565b90506001600160e01b0319808216908316146138e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615c12565b505050565b60608183111561390b5761390b61390660008585613ecf565b613eee565b8351821115613924576139246139066001848751613ecf565b50819003910190815290565b60008160040183511015613951576139516139066003855185600401613ecf565b5001602001516001600160e01b03191690565b60008160140183511015613985576139856139066004855185601401613ecf565b5001601401516001600160a01b031690565b6000610dc18383613ef6565b7f18e4b1410000000000000000000000000000000000000000000000000000000090565b60008183106139d65781610dc1565b5090919050565b7f4678472b0000000000000000000000000000000000000000000000000000000090565b7fb6555d6f0000000000000000000000000000000000000000000000000000000090565b7f488219a60000000000000000000000000000000000000000000000000000000090565b7f1b8388f70000000000000000000000000000000000000000000000000000000090565b7fe94a7ed00000000000000000000000000000000000000000000000000000000090565b7f4ad312750000000000000000000000000000000000000000000000000000000090565b606081831115613ace57613ace61390660008585613ecf565b8351821115613ae757613ae76139066001848751613ecf565b8282036040519080825280601f01601f191660200182016040528015613b14576020820181803883390190505b509050610dc1613b2382613f20565b84613b2d87613f20565b018351613f26565b6060806060613b516004855186613ab59092919063ffffffff16565b8060200190516109619190810190614c65565b60408051600180825281830190925260609182918291816020015b613b87614131565b815260200190600190039081613b7f5750506040805160018082528183019092529194506020808301908038833901905050604080516001808252818301909252919350816020015b6060815260200190600190039081613bd05750508451909150613bfd90859060049063ffffffff613ab516565b806020019051613c1091908101906150ec565b85600081518110613c1d57fe5b6020026020010185600081518110613c3157fe5b6020026020010185600081518110613c4557fe5b6020908102919091010192909252919052529193909250565b604080516001808252818301909252606091829182916020808301908038833950508551919350613c9a9186915060049063ffffffff613ab516565b806020019051613cad9190810190614cdf565b84518590600090613cba57fe5b60209081029190910101919091529095929450925050565b7f11c7b7200000000000000000000000000000000000000000000000000000000090565b7fa15c0d060000000000000000000000000000000000000000000000000000000090565b7f7e5a23180000000000000000000000000000000000000000000000000000000090565b7f5bd0428d0000000000000000000000000000000000000000000000000000000090565b7f20d11f610000000000000000000000000000000000000000000000000000000090565b7ff59851840000000000000000000000000000000000000000000000000000000090565b613db26141c4565b6020810184905260a08501516080860151613dce918691613fcb565b815260a085015160c0860151613de5918691613fcb565b604082015260a085015160e0860151613dff918691613fcb565b6060820152613e14828463ffffffff613fff16565b6080820152949350505050565b600081518351148015610dc15750508051602091820120825192909101919091201490565b600082820183811015610dc157610dc16139066000868661402c565b6000613e8483613e78868563ffffffff613fff16565b9063ffffffff61404b16565b949350505050565b600082821115613ea557613ea56139066002858561402c565b50900390565b7fe53c76c80000000000000000000000000000000000000000000000000000000090565b6060632800659560e01b848484604051602401610d7793929190615a7b565b805160208201fd5b60008160200183511015613f1757613f176139066005855185602001613ecf565b50016020015190565b60200190565b6020811015613f50576001816020036101000a0380198351168185511680821786525050506138e8565b82821415613f5d576138e8565b82821115613f975760208103905080820181840181515b82851015613f8f578451865260209586019590940193613f74565b9052506138e8565b60208103905080820181840183515b81861215613fc25782518252601f199283019290910190613fa6565b85525050505050565b6000613fd8848484614075565b15613feb57613feb6139068585856140db565b613e8483613e78868563ffffffff613fff16565b60008261400e57506000610921565b8282028284828161401b57fe5b0414610dc157610dc1613906600186865b606063e946c1bb60e01b848484604051602401610d7793929190615a0a565b600081614061576140616139066003858561402c565b600082848161406c57fe5b04949350505050565b600082614087576140876139066140fa565b811580614092575083155b1561409f57506000610dc1565b600083806140a957fe5b85840990506140be858463ffffffff613fff16565b6140d0826103e863ffffffff613fff16565b101595945050505050565b606063339f3de260e01b848484604051602401610d7793929190615ce5565b60408051808201909152600481527fa791837c00000000000000000000000000000000000000000000000000000000602082015290565b604051806101c0016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001606081525090565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b803561092181615dc1565b805161092181615dc1565b600082601f830112614239578081fd5b813561424c61424782615d22565b615cfb565b81815291506020808301908481018184028601820187101561426d57600080fd5b60005b848110156120bc57813561428381615dc1565b84529282019290820190600101614270565b600082601f8301126142a5578081fd5b81516142b361424782615d22565b8181529150602080830190840160005b838110156142f0576142db8760208451890101614515565b835260209283019291909101906001016142c3565b5050505092915050565b600082601f83011261430a578081fd5b813561431861424782615d22565b8181529150602080830190840160005b838110156142f05761434087602084358901016144c7565b83526020928301929190910190600101614328565b600082601f830112614365578081fd5b815161437361424782615d22565b8181529150602080830190840160005b838110156142f05761439b87602084518901016146aa565b83526020928301929190910190600101614383565b600082601f8301126143c0578081fd5b81356143ce61424782615d22565b8181529150602080830190840160005b838110156142f0576143f6876020843589010161455b565b835260209283019291909101906001016143de565b600082601f83011261441b578081fd5b815161442961424782615d22565b81815291506020808301908481018184028601820187101561444a57600080fd5b60005b848110156120bc5781518452928201929082019060010161444d565b600082601f830112614479578081fd5b813561448761424782615d22565b8181529150602080830190848101818402860182018710156144a857600080fd5b60005b848110156120bc578135845292820192908201906001016144ab565b600082601f8301126144d7578081fd5b81356144e561424782615d42565b91508082528360208285010111156144fc57600080fd5b8060208401602084013760009082016020015292915050565b600082601f830112614525578081fd5b815161453361424782615d42565b915080825283602082850101111561454a57600080fd5b6120c1816020840160208601615d66565b60006101c080838503121561456e578182fd5b61457781615cfb565b9150506145848383614213565b81526145938360208401614213565b60208201526145a58360408401614213565b60408201526145b78360608401614213565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e08201526101008083013581830152506101208083013581830152506101408083013567ffffffffffffffff8082111561461957600080fd5b614625868387016144c7565b8385015261016092508285013591508082111561464157600080fd5b61464d868387016144c7565b8385015261018092508285013591508082111561466957600080fd5b614675868387016144c7565b838501526101a092508285013591508082111561469157600080fd5b5061469e858286016144c7565b82840152505092915050565b60006101c08083850312156146bd578182fd5b6146c681615cfb565b9150506146d3838361421e565b81526146e2836020840161421e565b60208201526146f4836040840161421e565b6040820152614706836060840161421e565b60608201526080820151608082015260a082015160a082015260c082015160c082015260e082015160e08201526101008083015181830152506101208083015181830152506101408083015167ffffffffffffffff8082111561476857600080fd5b61477486838701614515565b8385015261016092508285015191508082111561479057600080fd5b61479c86838701614515565b838501526101809250828501519150808211156147b857600080fd5b6147c486838701614515565b838501526101a09250828501519150808211156147e057600080fd5b5061469e85828601614515565b805160ff8116811461092157600080fd5b60006020828403121561480f578081fd5b8135610dc181615dc1565b6000806040838503121561482c578081fd5b825161483781615dc1565b602084015190925061484881615dc1565b809150509250929050565b600080600060608486031215614867578081fd5b835161487281615dc1565b602085015190935061488381615dc1565b80925050604084015190509250925092565b6000806000606084860312156148a9578081fd5b83516148b481615dc1565b602085015190935067ffffffffffffffff8111156148d0578182fd5b6148dc86828701614515565b925050604084015190509250925092565b60008060008060808587031215614902578182fd5b845161490d81615dc1565b602086015190945067ffffffffffffffff8082111561492a578384fd5b61493688838901614515565b9450604087015191508082111561494b578384fd5b61495788838901614515565b9350606087015191508082111561496c578283fd5b5061497987828801614515565b91505092959194509250565b60008060408385031215614997578182fd5b82356149a281615dc1565b9150602083013567ffffffffffffffff8111156149bd578182fd5b6149c9858286016142fa565b9150509250929050565b600080600080608085870312156149e8578182fd5b84356149f381615dc1565b9350602085013567ffffffffffffffff80821115614a0f578384fd5b614a1b88838901614469565b94506040870135915080821115614a30578384fd5b614a3c88838901614469565b93506060870135915080821115614a51578283fd5b50614979878288016144c7565b60008060408385031215614a70578182fd5b8235614a7b81615dc1565b9150602083013567ffffffffffffffff811115614a96578182fd5b6149c9858286016144c7565b600080600060608486031215614ab6578081fd5b8335614ac181615dc1565b9250602084013567ffffffffffffffff811115614adc578182fd5b614ae8868287016144c7565b925050604084013590509250925092565b60008060408385031215614b0b578182fd5b8235614b1681615dc1565b946020939093013593505050565b600060208284031215614b35578081fd5b813567ffffffffffffffff811115614b4b578182fd5b613e8484828501614229565b600060208284031215614b68578081fd5b815167ffffffffffffffff811115614b7e578182fd5b613e8484828501614355565b600080600060608486031215614b9e578081fd5b833567ffffffffffffffff80821115614bb5578283fd5b614bc1878388016143b0565b94506020860135915080821115614bd6578283fd5b614be287838801614229565b93506040860135915080821115614bf7578283fd5b50614c0486828701614469565b9150509250925092565b60008060408385031215614c20578182fd5b823567ffffffffffffffff80821115614c37578384fd5b614c43868387016143b0565b93506020850135915080821115614c58578283fd5b506149c9858286016142fa565b600080600060608486031215614c79578081fd5b835167ffffffffffffffff80821115614c90578283fd5b614c9c87838801614355565b94506020860151915080821115614cb1578283fd5b614cbd8783880161440b565b93506040860151915080821115614cd2578283fd5b50614c0486828701614295565b600080600060608486031215614cf3578081fd5b835167ffffffffffffffff80821115614d0a578283fd5b614d1687838801614355565b9450602086015193506040860151915080821115614cd2578283fd5b60008060408385031215614d44578182fd5b823567ffffffffffffffff80821115614d5b578384fd5b614c4386838701614469565b60008060408385031215614d79578182fd5b825167ffffffffffffffff80821115614d90578384fd5b614d9c8683870161440b565b93506020850151915080821115614db1578283fd5b506149c985828601614295565b600060208284031215614dcf578081fd5b81518015158114610dc1578182fd5b60008060008060808587031215614df3578182fd5b845193506020850151614e0581615dc1565b604086015190935067ffffffffffffffff8082111561494b578384fd5b60008060408385031215614e34578182fd5b505080516020909101519092909150565b60008060408385031215614e57578182fd5b82519150602083015167ffffffffffffffff811115614e74578182fd5b6149c985828601614515565b600080600060608486031215614e94578081fd5b83519250602084015167ffffffffffffffff80821115614eb2578283fd5b614ebe87838801614515565b93506040860151915080821115614ed3578283fd5b50614c0486828701614515565b60008060408385031215614ef2578182fd5b82519150602083015161484881615dd6565b60008060408385031215614f16578182fd5b82516001600160e01b031981168114614837578283fd5b600060208284031215614f3e578081fd5b813567ffffffffffffffff811115614f54578182fd5b613e84848285016144c7565b60006060828403128015614f72578182fd5b8015614f7c578182fd5b50614f876060615cfb565b614f9184846147ed565b815260208301516020820152604083015160408201528091505092915050565b600060208284031215614fc2578081fd5b815167ffffffffffffffff811115614fd8578182fd5b613e84848285016146aa565b600080600060608486031215614ff8578081fd5b833567ffffffffffffffff81111561500e578182fd5b61501a8682870161455b565b935050602084013561502b81615dc1565b929592945050506040919091013590565b6000806040838503121561504e578182fd5b823567ffffffffffffffff80821115615065578384fd5b6150718683870161455b565b93506020850135915080821115615086578283fd5b506149c9858286016144c7565b600080600080608085870312156150a8578182fd5b845167ffffffffffffffff808211156150bf578384fd5b6150cb888389016146aa565b955060208701519150808211156150e0578384fd5b614936888389016146aa565b600080600060608486031215615100578081fd5b835167ffffffffffffffff80821115615117578283fd5b615123878388016146aa565b9450602086015193506040860151915080821115614ed3578283fd5b600060208284031215615150578081fd5b5051919050565b60008060408385031215615169578182fd5b825161517481615dd6565b6020939093015192949293505050565b600080600060608486031215615198578081fd5b83516151a381615dd6565b6020850151604086015191945092506151bb81615dc1565b809150509250925092565b600080600080608085870312156151db578182fd5b6151e586866147ed565b93506020850151925060408501516151fc81615dc1565b606086015190925067ffffffffffffffff811115615218578182fd5b61497987828801614515565b600080600060608486031215615238578081fd5b61524285856147ed565b925060208401519150604084015167ffffffffffffffff811115615264578182fd5b614c0486828701614515565b600080600060608486031215615284578081fd5b61528e85856147ed565b925060208401519150604084015190509250925092565b6001600160a01b03169052565b6000815180845260208401935060208301825b828110156152ec5781516001600160a01b03168652602095860195909101906001016152c5565b5093949350505050565b600081518084526020840180819550602083028101915060208501845b8481101561534157828403885261532b84835161537e565b6020988901989094509190910190600101615313565b50919695505050505050565b6000815180845260208401935060208301825b828110156152ec578151865260209586019590910190600101615360565b60008151808452615396816020860160208601615d66565b601f01601f19169290920160200192915050565b805160ff16825260208082015190830152604090810151910152565b60006101c06153d68484516152a5565b60208301516153e860208601826152a5565b5060408301516153fb60408601826152a5565b50606083015161540e60608601826152a5565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e08501526101008084015181860152506101208084015181860152506101408084015182828701526154678387018261537e565b91505061016091508184015185820383870152615484828261537e565b9250505061018080840151858303828701526154a0838261537e565b9150506101a0915081840151858203838701526154bd828261537e565b9695505050505050565b600082516154d9818460208701615d66565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60006001600160a01b038616825260806020830152615557608083018661534d565b8281036040840152615569818661534d565b838103606085015261557b818661537e565b98975050505050505050565b60006001600160a01b0385168252606060208301526155a9606083018561537e565b9050826040830152949350505050565b60006001600160a01b0386168252608060208301526155db608083018661537e565b8281036040840152615569818661537e565b6001600160a01b03929092168252602082015260400190565b60006080825261561960808301876152f6565b828103602084015261562b81876152b2565b838103604085015261563d81876152b2565b9150508281036060840152615652818561534d565b979650505050505050565b602080825282518282018190526000918401906040840190835b8181101561569e57835161568a81615db7565b835260209384019390920191600101615677565b509095945050505050565b606080825284519082018190526000906020906080840190828801845b828110156156ec576156d98483516153aa565b60609390930192908401906001016156c6565b50505083810382850152615700818761534d565b84810360408601528551808252908301915082860190845b81811015615736578251151584529284019291840191600101615718565b509198975050505050505050565b600060208252610dc1602083018461534d565b60006040825261576a604083018561534d565b828103602084015261577c81856152f6565b95945050505050565b600060408252615798604083018561534d565b828103602084015261577c818561534d565b60008582526001600160a01b0385166020830152608060408301526157d2608083018561537e565b8281036060840152615652818561537e565b918252602082015260400190565b600083825260406020830152613e84604083018461537e565b600084825260606020830152615824606083018561537e565b82810360408401526154bd818561537e565b8281526040810161584683615dad565b8260208301529392505050565b6001600160e01b031991909116815260200190565b6001600160e01b03199290921682526001600160a01b0316602082015260400190565b60006001600160e01b0319871682526001600160a01b038616602083015260a060408301526158bd60a083018661534d565b82810360608401526158cf818661534d565b83810360808501526158e1818661537e565b9998505050505050505050565b60006001600160e01b0319861682526001600160a01b038516602083015260806040830152615920608083018561537e565b905082606083015295945050505050565b6001600160e01b03199390931683526001600160a01b03919091166020830152604082015260600190565b60006001600160e01b0319851682526060602083015261597f606083018561534d565b82810360408401526154bd81856152f6565b600060208252610dc1602083018461537e565b6000608082526159b7608083018761537e565b6001600160a01b03958616602084015293909416604082015260ff9190911660609091015292915050565b60006159ed85615d96565b8482528360208301526060604083015261577c606083018461537e565b6060810160048510615a1857fe5b938152602081019290925260409091015290565b60608101615a3985615da3565b93815260208101929092526001600160a01b031660409091015290565b6040810160048410615a6457fe5b9281526020015290565b60608101615a1885615da3565b6060810160088510615a1857fe5b60208101615a9683615db7565b91905290565b6000615aa786615dad565b8582528460208301526001600160a01b0384166040830152608060608301526154bd608083018461537e565b60408101615a6484615d96565b600060808252615af3608083018761537e565b602083820381850152818751808452828401915082838202850101838a01865b83811015615b4157601f19878403018552615b2f8383516153c6565b94860194925090850190600101615b13565b50508681036040880152615b55818a61534d565b945050505050828103606084015261565281856152f6565b60208082526013908201527f554e4b4e4f574e5f52455455524e5f4441544100000000000000000000000000604082015260600190565b60208082526019908201527f554e4b4e4f574e5f46554e4354494f4e5f53454c4543544f5200000000000000604082015260600190565b6020808252600d908201527f554e494d504c454d454e54454400000000000000000000000000000000000000604082015260600190565b6020808252600c908201527f4241445f53454c4543544f520000000000000000000000000000000000000000604082015260600190565b6020808252600e908201527f57524f4e475f50524f58595f4944000000000000000000000000000000000000604082015260600190565b60a08101615c8e82866153aa565b8360608301528215156080830152949350505050565b600060208252610dc160208301846153c6565b600060408252615cca60408301856153c6565b828103602084015261577c818561537e565b90815260200190565b9283526020830191909152604082015260600190565b60405181810167ffffffffffffffff81118282101715615d1a57600080fd5b604052919050565b600067ffffffffffffffff821115615d38578081fd5b5060209081020190565b600067ffffffffffffffff821115615d58578081fd5b50601f01601f191660200190565b60005b83811015615d81578181015183820152602001615d69565b83811115615d90576000848401525b50505050565b60028110615da057fe5b50565b60038110615da057fe5b60078110615da057fe5b60058110615da057fe5b6001600160a01b0381168114615da057600080fd5b60ff81168114615da057600080fdfea365627a7a723158209bd08114ba2e3dada6fb089e11dba7dc3bfedf454a0bac82e7a05d67b08360dd6c6578706572696d656e74616cf564736f6c634300050c0040'; + '0x608060405234801561001057600080fd5b50600436106102e95760003560e01c80639a7e752611610191578063ca49f47c116100e3578063d3d862d111610097578063e4e6e7da11610071578063e4e6e7da14610760578063e77286eb14610781578063ee4f5a94146107a3576102e9565b8063d3d862d11461070b578063d46950281461071e578063e25cabf71461073e576102e9565b8063d001c5dc116100c8578063d001c5dc146106c5578063d186037f146106d8578063d3637905146106eb576102e9565b8063ca49f47c14610681578063cafd3a07146106a4576102e9565b8063a6627e9f11610145578063bbb2dcf61161011f578063bbb2dcf614610636578063bc03f96414610658578063c26cfecd14610679576102e9565b8063a6627e9f146105ed578063acaedc7414610600578063b43cffe114610623576102e9565b8063a070cac811610176578063a070cac8146105a7578063a0901e51146105ba578063a5cd62ba146105cd576102e9565b80639a7e7526146105605780639eadc83514610583576102e9565b806346eb65cb1161024a5780636f83188e116101fe5780637b66ad34116101d85780637b66ad34146105195780637d7275121461053a5780638f4ce4791461054d576102e9565b80636f83188e146104c25780637914b2ec146104e557806379c9c42614610506576102e9565b8063590aa8751161022f578063590aa8751461046d57806363eb39921461048d57806365129042146104a0576102e9565b806346eb65cb146104385780634dfdac201461044d576102e9565b8063314853ff116102a157806332aae3ad1161028657806332aae3ad146103d25780633db6dc61146103f4578063459be5e214610417576102e9565b8063314853ff1461039d578063327d3054146103bf576102e9565b80630d7b7d76116102d25780630d7b7d761461033a578063165979e11461035b5780632322cf761461037d576102e9565b806302d0aec3146102ee57806304a5618a14610318575b600080fd5b6103016102fc3660046149e0565b6107c5565b60405161030f9291906153ec565b60405180910390f35b61032b6103263660046149e0565b610821565b60405161030f939291906154e7565b61034d610348366004614511565b61089c565b60405161030f92919061539a565b61036e6103693660046149e0565b6108be565b60405161030f93929190615622565b61039061038b366004614511565b61091b565b60405161030f9190615357565b6103b06103ab3660046149e0565b610943565b60405161030f939291906153c1565b61034d6103cd3660046149e0565b61098a565b6103e56103e03660046149e0565b6109cc565b60405161030f93929190615598565b6104076104023660046149e0565b610a1f565b60405161030f9493929190615360565b61042a6104253660046149e0565b610a69565b60405161030f92919061560b565b61044b6104463660046149e0565b610abf565b005b61046061045b366004614438565b610bbb565b60405161030f91906152f1565b61048061047b3660046142b1565b610c3e565b60405161030f9190615547565b61048061049b366004614555565b610c95565b6104b36104ae3660046149e0565b610cf2565b60405161030f939291906150bf565b6104d56104d03660046149e0565b610d2c565b60405161030f9493929190615696565b6104f86104f33660046149e0565b6115e1565b60405161030f92919061541e565b610390610514366004614c3f565b611619565b61052c6105273660046149e0565b6116a2565b60405161030f9291906150a5565b610390610548366004614511565b6116da565b6104f861055b3660046149e0565b611cc1565b61057361056e3660046149e0565b611d1e565b60405161030f9493929190615652565b6105966105913660046149e0565b611d7f565b60405161030f959493929190615441565b6103906105b5366004614b3a565b611df7565b6104606105c83660046145d7565b611e78565b6105e06105db36600461463d565b611ef1565b60405161030f919061520b565b6104806105fb3660046145ac565b611fb4565b61061361060e3660046149e0565b61200d565b60405161030f9493929190615167565b610480610631366004614486565b612049565b6106496106443660046149e0565b6120a8565b60405161030f93929190615512565b61066b6106663660046149e0565b612122565b60405161030f9291906153a8565b61039061215b565b61069461068f3660046149e0565b612161565b60405161030f94939291906154a4565b6106b76106b23660046149e0565b6121df565b60405161030f929190615689565b6104606106d3366004614438565b61222d565b6103906106e6366004614511565b61229b565b6106fe6106f9366004614a8b565b612757565b60405161030f919061563d565b6104806107193660046147e5565b612cc5565b61073161072c3660046149e0565b612ce4565b60405161030f9190615409565b61075161074c3660046146c1565b612d94565b60405161030f93929190615256565b61077361076e366004614438565b612ecc565b60405161030f929190615332565b61079461078f366004614ae3565b612ee5565b60405161030f93929190615836565b6107b66107b13660046149e0565b61311f565b60405161030f939291906155e1565b6000806107d9836107d461315c565b613180565b60006107f260048551866131c09092919063ffffffff16565b8060200190516108059190810190614993565b909350905060ff8116600681111561081957fe5b915050915091565b60008080610835848263ffffffff61320316565b92506001600160e01b0319831663012b8bc960e11b146108705760405162461bcd60e51b8152600401610867906157ff565b60405180910390fd5b61088184601063ffffffff61323716565b915061089484602463ffffffff61326a16565b929491935050565b6000806108a984846116da565b91506108b5848461229b565b90509250929050565b60008060006108cf846107d4613276565b60006108e860048651876131c09092919063ffffffff16565b8060200190516108fb9190810190614e1e565b9094509250905060ff8116600281111561091157fe5b9350509193909250565b600080600061092a858561089c565b91509150610938828261329a565b925050505b92915050565b6000606080610954846107d46132b0565b835161096a90859060049063ffffffff6131c016565b80602001905161097d9190810190614933565b9196909550909350915050565b600080610999836107d46132d4565b82516109af90849060049063ffffffff6131c016565b8060200190516109c291908101906148d5565b9094909350915050565b60008060606109dd846107d46132f8565b60006109f660048651876131c09092919063ffffffff16565b806020019051610a099190810190614dd2565b9094509250905060ff8116600181111561091157fe5b600080606080610a31856107d461331c565b8451610a4790869060049063ffffffff6131c016565b806020019051610a5a9190810190614891565b92989197509550909350915050565b600080610a78836107d4613340565b6000610a9160048551866131c09092919063ffffffff16565b806020019051610aa49190810190614d10565b9250905060ff81166003811115610ab757fe5b925050915091565b6000610ad1828263ffffffff61320316565b90506001600160e01b03198116630f47261b60e41b1415610afc57610af582611cc1565b5050610bb7565b6001600160e01b0319811663012b8bc960e11b1415610b2657610b1e82610821565b505050610bb7565b6001600160e01b0319811663a7cb5fb760e01b1415610b5257610b4882611d7f565b5050505050610bb7565b6001600160e01b031981166394cfcdd760e01b1415610b7457610b1e826120a8565b6001600160e01b0319811663619ce88560e11b1415610b9f57610b9682612161565b50505050610bb7565b60405162461bcd60e51b8152600401610867906157ff565b5050565b606060008251905080604051908082528060200260200182016040528015610bed578160200160208202803883390190505b50915060005b818114610c3657610c1785858381518110610c0a57fe5b602002602001015161229b565b838281518110610c2357fe5b6020908102919091010152600101610bf3565b505092915050565b604051606090630f47261b60e41b90610c5b908490602401615091565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915290505b919050565b60405160609063619ce88560e11b90610cb690869086908690602401615135565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915290505b9392505050565b6000806000610d03846107d4613364565b8351610d1990859060049063ffffffff6131c016565b80602001905161097d9190810190614306565b60608080806000610d43868263ffffffff61320316565b90506001600160e01b0319811663dedfc1f160e01b1415610d9b576040518060400160405280601181526020017f626174636843616e63656c4f726465727300000000000000000000000000000081525094506111e3565b6001600160e01b03198116634b4a520160e11b1415610df1576040518060400160405280600f81526020017f626174636846696c6c4f7264657273000000000000000000000000000000000081525094506111e3565b6001600160e01b031981166323aa37f960e21b1415610e47576040518060400160405280601681526020017f626174636846696c6c4f72646572734e6f5468726f770000000000000000000081525094506111e3565b6001600160e01b03198116632fbb8b8560e21b1415610e9d576040518060400160405280601581526020017f626174636846696c6c4f724b696c6c4f7264657273000000000000000000000081525094506111e3565b6001600160e01b03198116632da6298760e01b1415610ef3576040518060400160405280600b81526020017f63616e63656c4f7264657200000000000000000000000000000000000000000081525094506111e3565b6001600160e01b03198116634da26aab60e11b1415610f49576040518060400160405280600981526020017f66696c6c4f72646572000000000000000000000000000000000000000000000081525094506111e3565b6001600160e01b03198116633852d63160e21b1415610f9f576040518060400160405280600f81526020017f66696c6c4f724b696c6c4f72646572000000000000000000000000000000000081525094506111e3565b6001600160e01b031981166378d29ac160e01b1415610ff5576040518060400160405280601681526020017f6d61726b65744275794f72646572734e6f5468726f770000000000000000000081525094506111e3565b6001600160e01b0319811663369da09960e01b141561104b576040518060400160405280601781526020017f6d61726b657453656c6c4f72646572734e6f5468726f7700000000000000000081525094506111e3565b6001600160e01b03198116638bc8efb360e01b14156110a1576040518060400160405280601981526020017f6d61726b65744275794f726465727346696c6c4f724b696c6c0000000000000081525094506111e3565b6001600160e01b0319811663a6c3bf3360e01b14156110f7576040518060400160405280601a81526020017f6d61726b657453656c6c4f726465727346696c6c4f724b696c6c00000000000081525094506111e3565b6001600160e01b031981166388ec79fb60e01b141561114d576040518060400160405280600b81526020017f6d617463684f726465727300000000000000000000000000000000000000000081525094506111e3565b6001600160e01b031981167f4f9559b10000000000000000000000000000000000000000000000000000000014806111ae57506001600160e01b031981167f2280c91000000000000000000000000000000000000000000000000000000000145b156111cb5760405162461bcd60e51b815260040161086790615791565b60405162461bcd60e51b81526004016108679061575a565b6001600160e01b0319811663dedfc1f160e01b141561126f57855161121290879060049063ffffffff61338816565b806020019051611225919081019061460a565b604080516000808252602082019092529195505b5060408051600080825260208201909252919450611267565b60608152602001906001900390816112525790505b5091506115d9565b6001600160e01b03198116632fbb8b8560e21b148061129e57506001600160e01b03198116634b4a520160e11b145b806112b957506001600160e01b031981166323aa37f960e21b145b156112d3576112c786613408565b919550935091506115d9565b6001600160e01b03198116632da6298760e01b14156113a25760408051600180825281830190925290816020015b611309613be4565b815260200190600190039081611301575050865190945061133490879060049063ffffffff61338816565b8060200190516113479190810190614a58565b8460008151811061135457fe5b60200260200101819052506000604051908082528060200260200182016040528015611239578160200160208202803883390190505060408051600080825260208201909252919450611267565b6001600160e01b03198116633852d63160e21b14806113d157506001600160e01b03198116634da26aab60e11b145b156113df576112c786613437565b6001600160e01b031981166378d29ac160e01b148061140e57506001600160e01b0319811663369da09960e01b145b8061142957506001600160e01b03198116638bc8efb360e01b145b8061144457506001600160e01b0319811663a6c3bf3360e01b145b15611452576112c786613531565b6001600160e01b031981166388ec79fb60e01b14156115d957611473613be4565b61147b613be4565b60608061149560048b518c6133889092919063ffffffff16565b8060200190516114a89190810190614b93565b604080516002808252606082019092529498509296509094509250816020015b6114d0613be4565b8152602001906001900390816114c857905050975083886000815181106114f357fe5b6020026020010181905250828860018151811061150c57fe5b602090810291909101015260408051600280825260608201909252908160200160208202803883390190505096508360a001518760008151811061154c57fe5b6020026020010181815250508260a001518760018151811061156a57fe5b60209081029190910101526040805160028082526060820190925290816020015b606081526020019060019003908161158b57905050955081866000815181106115b057fe5b602002602001018190525080866001815181106115c957fe5b6020026020010181905250505050505b509193509193565b6000806115f0836107d46135a5565b825161160690849060049063ffffffff6131c016565b8060200190516109c291908101906149b7565b600061169a846116956040518060400160405280600b81526020017f30782050726f746f636f6c0000000000000000000000000000000000000000008152506040518060400160405280600581526020017f332e302e3000000000000000000000000000000000000000000000000000000081525087876135c9565b613620565b949350505050565b6000806116b1836107d4613634565b82516116c790849060049063ffffffff6131c016565b8060200190516109c291908101906142cd565b6000806116ed838263ffffffff61320316565b90506001600160e01b03198116630f47261b60e41b141561181f57600061171b84601063ffffffff61323716565b6040519091506060907f70a082310000000000000000000000000000000000000000000000000000000090611754908890602401615091565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060836001600160a01b0316836040516117a59190615075565b600060405180830381855afa9150503d80600081146117e0576040519150601f19603f3d011682016040523d82523d6000602084013e6117e5565b606091505b50915091508180156117f8575080516020145b611803576000611814565b61181481600063ffffffff61326a16565b955050505050611cba565b6001600160e01b0319811663012b8bc960e11b14156119775760008061184485610821565b6040519194509250606091507f6352211e0000000000000000000000000000000000000000000000000000000090611880908490602401615357565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060846001600160a01b0316836040516118d19190615075565b600060405180830381855afa9150503d806000811461190c576040519150601f19603f3d011682016040523d82523d6000602084013e611911565b606091505b50915091506000828015611926575081516020145b611931576000611942565b61194282600c63ffffffff61323716565b9050896001600160a01b0316816001600160a01b031614611964576000611967565b60015b60ff169750505050505050611cba565b6001600160e01b0319811663a7cb5fb760e01b1415611b1757600060608061199e86611d7f565b5081519296509094509250905060005b818114611b0d5783516060907efdd58e00000000000000000000000000000000000000000000000000000000908b908790859081106119e957fe5b6020026020010151604051602401611a0292919061519b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060876001600160a01b031683604051611a539190615075565b600060405180830381855afa9150503d8060008114611a8e576040519150601f19603f3d011682016040523d82523d6000602084013e611a93565b606091505b50915091506000828015611aa8575081516020145b611ab3576000611ac4565b611ac482600063ffffffff61326a16565b90506000878681518110611ad457fe5b60200260200101518281611ae457fe5b0490508b811080611af357508b155b15611afc57809b505b5050600190930192506119ae915050565b5050505050611cba565b6001600160e01b0319811663619ce88560e11b1415611c1c576040516060907fa85e59e40000000000000000000000000000000000000000000000000000000090611b6d9086906000908190819060240161555a565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925260045491519092506000916001600160a01b031690611bbf908490615075565b600060405180830381855afa9150503d8060008114611bfa576040519150601f19603f3d011682016040523d82523d6000602084013e611bff565b606091505b5050905080611c0f576000611c13565b6000195b93505050611cba565b6001600160e01b031981166394cfcdd760e01b1415611cba57606080611c41856120a8565b80519194509250905060005b818114611cb5576000611c7389858481518110611c6657fe5b60200260200101516116da565b90506000858381518110611c8357fe5b60200260200101518281611c9357fe5b04905087811080611ca2575087155b15611cab578097505b5050600101611c4d565b505050505b5092915050565b600080611cd4838263ffffffff61320316565b91506001600160e01b03198216630f47261b60e41b14611d065760405162461bcd60e51b8152600401610867906157ff565b611d1783601063ffffffff61323716565b9050915091565b60008060006060611d31856107d4613658565b6000611d4a60048751886131c09092919063ffffffff16565b806020019051611d5d9190810190614d74565b91965094509250905060ff81166006811115611d7557fe5b9450509193509193565b60008060608080611d96868563ffffffff61320316565b94506001600160e01b0319851663a7cb5fb760e01b14611dc85760405162461bcd60e51b8152600401610867906157ff565b505050506024828101516044840151606485015160848601519496929591820184019490820184019391010190565b600061169a84611e736040518060400160405280600b81526020017f30782050726f746f636f6c0000000000000000000000000000000000000000008152506040518060400160405280600581526020017f332e302e3000000000000000000000000000000000000000000000000000000081525087876135c9565b61367c565b6060808251604051908082528060200260200182016040528015611ea6578160200160208202803883390190505b50905060005b83518114611cba57838181518110611ec057fe5b60200260200101516001600160a01b031631828281518110611ede57fe5b6020908102919091010152600101611eac565b606060008451905080604051908082528060200260200182016040528015611f23578160200160208202803883390190505b50915060005b818114611fab57611f74868281518110611f3f57fe5b6020026020010151868381518110611f5357fe5b6020026020010151868481518110611f6757fe5b6020026020010151612757565b838281518110611f8057fe5b60200260200101906004811115611f9357fe5b90816004811115611fa057fe5b905250600101611f29565b50509392505050565b60405160609063012b8bc960e11b90611fd3908590859060240161519b565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905092915050565b60006060806060612020856107d461368b565b845161203690869060049063ffffffff6131c016565b806020019051610a5a91908101906143a0565b60405160609063a7cb5fb760e01b9061206c9087908790879087906024016150e3565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050949350505050565b60006060806120bd848463ffffffff61320316565b92506001600160e01b031983166394cfcdd760e01b146120ef5760405162461bcd60e51b8152600401610867906157ff565b835161210590859060049063ffffffff61338816565b806020019051612118919081019061481a565b9395909450915050565b60006060612132836107d46136af565b825161214890849060049063ffffffff6131c016565b8060200190516109c291908101906148f8565b60055481565b600080606081612177858263ffffffff61320316565b93506001600160e01b0319841663619ce88560e11b146121a95760405162461bcd60e51b8152600401610867906157ff565b84516121bf90869060049063ffffffff61338816565b8060200190516121d29190810190614348565b9597919650949350915050565b6000806121ee836107d46136d3565b600061220760048551866131c09092919063ffffffff16565b80602001905161221a9190810190614d10565b9250905060ff81166001811115610ab757fe5b60606000825190508060405190808252806020026020018201604052801561225f578160200160208202803883390190505b50915060005b818114610c365761227c85858381518110611c6657fe5b83828151811061228857fe5b6020908102919091010152600101612265565b6000806122ae838263ffffffff61320316565b90506001600160e01b031981166394cfcdd760e01b1415612347576060806122d5856120a8565b80519194509250905060005b81811461233c5760006122fa89858481518110610c0a57fe5b9050600085838151811061230a57fe5b6020026020010151828161231a57fe5b04905087811080612329575087155b15612332578097505b50506001016122e1565b5061093d9350505050565b6001600160e01b03198116630f47261b60e41b14156123b957600061237384601063ffffffff61323716565b6001546040519192506060917fdd62ed3e00000000000000000000000000000000000000000000000000000000916117549189916001600160a01b0316906024016150a5565b6001600160e01b0319811663012b8bc960e11b1415612605576000806123de85610821565b6002546040519295509093506060925063e985e9c560e01b91612411918a916001600160a01b03909116906024016150a5565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060846001600160a01b0316836040516124629190615075565b600060405180830381855afa9150503d806000811461249d576040519150601f19603f3d011682016040523d82523d6000602084013e6124a2565b606091505b50915091508115806124b657508051602014155b806124d257506124cd81600063ffffffff61326a16565b600114155b156125f6576040516060907f081812fc000000000000000000000000000000000000000000000000000000009061250d908790602401615357565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050856001600160a01b03168160405161255a9190615075565b600060405180830381855afa9150503d8060008114612595576040519150601f19603f3d011682016040523d82523d6000602084013e61259a565b606091505b5090935091508280156125ae575081516020145b80156125dd57506002546001600160a01b03166125d283600c63ffffffff61323716565b6001600160a01b0316145b6125e85760006125eb565b60015b60ff16975050611b0d565b60001996505050505050611cba565b6001600160e01b0319811663a7cb5fb760e01b141561273357600061262984611d7f565b50506003546040519294506060935063e985e9c560e01b9261265a925089916001600160a01b0316906024016150a5565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060836001600160a01b0316836040516126ab9190615075565b600060405180830381855afa9150503d80600081146126e6576040519150601f19603f3d011682016040523d82523d6000602084013e6126eb565b606091505b50915091508180156126fe575080516020145b801561271a575061271681600063ffffffff61326a16565b6001145b612725576000611814565b600019955050505050611cba565b6001600160e01b0319811663619ce88560e11b1415611cba57506000199392505050565b6000612761613c77565b6127f28584600660009054906101000a90046001600160a01b03166001600160a01b0316631ce4c78b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156127b457600080fd5b505afa1580156127c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506127ec9190810190614cf8565b3a6136f7565b60408051600480825260a0820190925291925060609190816020015b606081526020019060019003908161280e57505060408051600480825260a082019092529192506060919060208201608080388339505060408051600480825260a08201909252929350606092915060208201608080388339505060408051600480825260a08201909252929350606092915060208201608080388339019050509050886101600151846000815181106128a457fe5b602002602001018190525087836000815181106128bd57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508860000151826000815181106128ef57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050868160008151811061291d57fe5b6020026020010181815250508861014001518460018151811061293c57fe5b602002602001018190525088600001518360018151811061295957fe5b60200260200101906001600160a01b031690816001600160a01b031681525050878260018151811061298757fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508460000151816001815181106129b957fe5b602002602001018181525050886101a00151846002815181106129d857fe5b602002602001018190525087836002815181106129f157fe5b60200260200101906001600160a01b031690816001600160a01b031681525050886040015182600281518110612a2357fe5b60200260200101906001600160a01b031690816001600160a01b031681525050846060015181600281518110612a5557fe5b60200260200101818152505088610180015184600381518110612a7457fe5b6020026020010181905250886000015183600381518110612a9157fe5b60200260200101906001600160a01b031690816001600160a01b031681525050886040015182600381518110612ac357fe5b60200260200101906001600160a01b031690816001600160a01b031681525050846040015181600381518110612af557fe5b60209081029190910101526040516060907fb04fbddd0000000000000000000000000000000000000000000000000000000090612b3c9087908790879087906024016151b4565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925260065491519092506060916001600160a01b031690612b8e908490615075565b6000604051808303816000865af19150503d8060008114612bcb576040519150601f19603f3d011682016040523d82523d6000602084013e612bd0565b606091505b50915060009050612be7828263ffffffff61320316565b9050612bf16132f8565b6001600160e01b031982811691161415612c33576000612c10836109cc565b5091505060ff81166004811115612c2357fe5b9950505050505050505050610ceb565b612c3b6132b0565b6001600160e01b031982811691161415612c6e576000612c5a83610943565b509091505060ff81166004811115612c2357fe5b815160208301207ff43f26ea5a94b478394a975e856464913dc1a8a1ca70939d974aa7c238aa0ce01415612cad57600498505050505050505050610ceb565b60405162461bcd60e51b815260040161086790615723565b6040516060906394cfcdd760e01b90611fd39085908590602401615304565b6000612cf6828263ffffffff61320316565b90506001600160e01b03198116630f47261b60e41b1480612d2757506001600160e01b0319811663012b8bc960e11b145b80612d4257506001600160e01b0319811663a7cb5fb760e01b145b80612d5d57506001600160e01b031981166394cfcdd760e01b145b80612d7857506001600160e01b0319811663619ce88560e11b145b610c905760405162461bcd60e51b8152600401610867906157ff565b606080606060008551905080604051908082528060200260200182016040528015612dd957816020015b612dc6613ca6565b815260200190600190039081612dbe5790505b50935080604051908082528060200260200182016040528015612e06578160200160208202803883390190505b50925080604051908082528060200260200182016040528015612e33578160200160208202803883390190505b50915060005b818114612ec357612e70878281518110612e4f57fe5b6020026020010151878381518110612e6357fe5b6020026020010151612ee5565b8751889085908110612e7e57fe5b60200260200101878581518110612e9157fe5b60200260200101878681518110612ea457fe5b9315156020948502919091019093019290925291905252600101612e39565b50509250925092565b606080612ed9848461222d565b91506108b58484610bbb565b612eed613ca6565b600080546040517f9d3fa4b900000000000000000000000000000000000000000000000000000000815282916001600160a01b031690639d3fa4b990612f3790889060040161585a565b60606040518083038186803b158015612f4f57600080fd5b505afa158015612f63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612f879190810190614a13565b85516000546040517fa12dcc6f00000000000000000000000000000000000000000000000000000000815292955090916001600160a01b039091169063a12dcc6f90612fd9908990899060040161586d565b60206040518083038186803b158015612ff157600080fd5b505afa158015613005573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506130299190810190614871565b9150600061303c8288610140015161091b565b60a088015160c08901516101808a01516101408b01519394509192909160009161306b9163ffffffff61376e16565b15613098576130918461308b848d6080015161379390919063ffffffff16565b856137af565b90506130f1565b816130ac57613091848b60800151856137af565b60006130bd868c610180015161091b565b905060006130d0868d60800151876137af565b905060006130df8386886137af565b90506130eb828261329a565b93505050505b61311161310b8960400151856137d190919063ffffffff16565b8261329a565b965050505050509250925092565b6000806000613130846107d46137f0565b600061314960048651876131c09092919063ffffffff16565b8060200190516108fb9190810190614d3d565b7ffdb6ca8d0000000000000000000000000000000000000000000000000000000090565b600061318d836000613203565b90506001600160e01b0319808216908316146131bb5760405162461bcd60e51b8152600401610867906157c8565b505050565b6060818311156131de576131de6131d960008585613814565b613833565b83518211156131f7576131f76131d96001848751613814565b50819003910190815290565b60008160040183511015613224576132246131d96003855185600401613814565b5001602001516001600160e01b03191690565b60008160140183511015613258576132586131d96004855185601401613814565b5001601401516001600160a01b031690565b6000610ceb838361383b565b7f18e4b1410000000000000000000000000000000000000000000000000000000090565b60008183106132a95781610ceb565b5090919050565b7f4678472b0000000000000000000000000000000000000000000000000000000090565b7fb6555d6f0000000000000000000000000000000000000000000000000000000090565b7f488219a60000000000000000000000000000000000000000000000000000000090565b7f1b8388f70000000000000000000000000000000000000000000000000000000090565b7fe94a7ed00000000000000000000000000000000000000000000000000000000090565b7f4ad312750000000000000000000000000000000000000000000000000000000090565b6060818311156133a1576133a16131d960008585613814565b83518211156133ba576133ba6131d96001848751613814565b8282036040519080825280601f01601f1916602001820160405280156133e7576020820181803883390190505b509050610ceb6133f682613865565b8461340087613865565b01835161386b565b606080606061342460048551866133889092919063ffffffff16565b80602001905161097d9190810190614718565b60408051600180825281830190925260609182918291816020015b61345a613be4565b8152602001906001900390816134525750506040805160018082528183019092529194506020808301908038833901905050604080516001808252818301909252919350816020015b60608152602001906001900390816134a357505084519091506134d090859060049063ffffffff61338816565b8060200190516134e39190810190614bec565b856000815181106134f057fe5b602002602001018560008151811061350457fe5b602002602001018560008151811061351857fe5b6020908102919091010192909252919052529193909250565b60408051600180825281830190925260609182918291602080830190803883395050855191935061356d9186915060049063ffffffff61338816565b8060200190516135809190810190614792565b8451859060009061358d57fe5b60209081029190910101919091529095929450925050565b7f11c7b7200000000000000000000000000000000000000000000000000000000090565b8351602094850120835193850193909320604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f815295860194909452928401929092526060830152608082015260a0902090565b6000610ceb8261362f85613910565b61398b565b7fa15c0d060000000000000000000000000000000000000000000000000000000090565b7f7e5a23180000000000000000000000000000000000000000000000000000000090565b6000610ceb8261362f856139c5565b7f5bd0428d0000000000000000000000000000000000000000000000000000000090565b7f20d11f610000000000000000000000000000000000000000000000000000000090565b7ff59851840000000000000000000000000000000000000000000000000000000090565b6136ff613c77565b6020810184905260a0850151608086015161371b918691613a7e565b815260a085015160c0860151613732918691613a7e565b604082015260a085015160e086015161374c918691613a7e565b6060820152613761828463ffffffff613ab216565b6080820152949350505050565b600081518351148015610ceb5750508051602091820120825192909101919091201490565b600082820183811015610ceb57610ceb6131d960008686613adf565b600061169a836137c5868563ffffffff613ab216565b9063ffffffff613afe16565b6000828211156137ea576137ea6131d960028585613adf565b50900390565b7fe53c76c80000000000000000000000000000000000000000000000000000000090565b6060632800659560e01b848484604051602401610cb69392919061562f565b805160208201fd5b6000816020018351101561385c5761385c6131d96005855185602001613814565b50016020015190565b60200190565b6020811015613895576001816020036101000a0380198351168185511680821786525050506131bb565b828214156138a2576131bb565b828211156138dc5760208103905080820181840181515b828510156138d45784518652602095860195909401936138b9565b9052506131bb565b60208103905080820181840183515b818612156139075782518252601f1992830192909101906138eb565b85525050505050565b608081810151825160208085015160408087015160609788015186519685019690962082517fec69816980a3a3ca4554410e60253953e9ff375ba4536a98adfa15cc7154150881529485019590955290830191909152948101949094526001600160a01b039091169183019190915260a082015260c0902090565b6040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6101408101516101608201516101808301516101a08401516000937ff80322eb8376aafb64eadf8f0d7623f22130fd9491a221e902b713cb984a753493909290916020871015613a1157fe5b601f1987018051610140890180516101608b0180516101808d0180516101a08f0180519d89528c5160209d8e012087528b519b8d019b909b2084528951998c01999099208152875197909a019690962088526101e085209390945290529190529252919091529050919050565b6000613a8b848484613b28565b15613a9e57613a9e6131d9858585613b8e565b61169a836137c5868563ffffffff613ab216565b600082613ac15750600061093d565b82820282848281613ace57fe5b0414610ceb57610ceb6131d9600186865b606063e946c1bb60e01b848484604051602401610cb6939291906155c0565b600081613b1457613b146131d960038585613adf565b6000828481613b1f57fe5b04949350505050565b600082613b3a57613b3a6131d9613bad565b811580613b45575083155b15613b5257506000610ceb565b60008380613b5c57fe5b8584099050613b71858463ffffffff613ab216565b613b83826103e863ffffffff613ab216565b101595945050505050565b606063339f3de260e01b848484604051602401610cb693929190615892565b60408051808201909152600481527fa791837c00000000000000000000000000000000000000000000000000000000602082015290565b604051806101c0016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001606081525090565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b803561093d81615979565b805161093d81615979565b600082601f830112613cec578081fd5b8135613cff613cfa826158cf565b6158a8565b818152915060208083019084810181840286018201871015613d2057600080fd5b60005b84811015611cb5578135613d3681615979565b84529282019290820190600101613d23565b600082601f830112613d58578081fd5b8151613d66613cfa826158cf565b8181529150602080830190840160005b83811015613da357613d8e8760208451890101613fc8565b83526020928301929190910190600101613d76565b5050505092915050565b600082601f830112613dbd578081fd5b8135613dcb613cfa826158cf565b8181529150602080830190840160005b83811015613da357613df38760208435890101613f7a565b83526020928301929190910190600101613ddb565b600082601f830112613e18578081fd5b8151613e26613cfa826158cf565b8181529150602080830190840160005b83811015613da357613e4e876020845189010161415d565b83526020928301929190910190600101613e36565b600082601f830112613e73578081fd5b8135613e81613cfa826158cf565b8181529150602080830190840160005b83811015613da357613ea9876020843589010161400e565b83526020928301929190910190600101613e91565b600082601f830112613ece578081fd5b8151613edc613cfa826158cf565b818152915060208083019084810181840286018201871015613efd57600080fd5b60005b84811015611cb557815184529282019290820190600101613f00565b600082601f830112613f2c578081fd5b8135613f3a613cfa826158cf565b818152915060208083019084810181840286018201871015613f5b57600080fd5b60005b84811015611cb557813584529282019290820190600101613f5e565b600082601f830112613f8a578081fd5b8135613f98613cfa826158ef565b9150808252836020828501011115613faf57600080fd5b8060208401602084013760009082016020015292915050565b600082601f830112613fd8578081fd5b8151613fe6613cfa826158ef565b9150808252836020828501011115613ffd57600080fd5b611cba81602084016020860161591e565b60006101c0808385031215614021578182fd5b61402a816158a8565b9150506140378383613cc6565b81526140468360208401613cc6565b60208201526140588360408401613cc6565b604082015261406a8360608401613cc6565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e08201526101008083013581830152506101208083013581830152506101408083013567ffffffffffffffff808211156140cc57600080fd5b6140d886838701613f7a565b838501526101609250828501359150808211156140f457600080fd5b61410086838701613f7a565b8385015261018092508285013591508082111561411c57600080fd5b61412886838701613f7a565b838501526101a092508285013591508082111561414457600080fd5b5061415185828601613f7a565b82840152505092915050565b60006101c0808385031215614170578182fd5b614179816158a8565b9150506141868383613cd1565b81526141958360208401613cd1565b60208201526141a78360408401613cd1565b60408201526141b98360608401613cd1565b60608201526080820151608082015260a082015160a082015260c082015160c082015260e082015160e08201526101008083015181830152506101208083015181830152506101408083015167ffffffffffffffff8082111561421b57600080fd5b61422786838701613fc8565b8385015261016092508285015191508082111561424357600080fd5b61424f86838701613fc8565b8385015261018092508285015191508082111561426b57600080fd5b61427786838701613fc8565b838501526101a092508285015191508082111561429357600080fd5b5061415185828601613fc8565b805160ff8116811461093d57600080fd5b6000602082840312156142c2578081fd5b8135610ceb81615979565b600080604083850312156142df578081fd5b82516142ea81615979565b60208401519092506142fb81615979565b809150509250929050565b60008060006060848603121561431a578081fd5b835161432581615979565b602085015190935061433681615979565b80925050604084015190509250925092565b60008060006060848603121561435c578081fd5b835161436781615979565b602085015190935067ffffffffffffffff811115614383578182fd5b61438f86828701613fc8565b925050604084015190509250925092565b600080600080608085870312156143b5578182fd5b84516143c081615979565b602086015190945067ffffffffffffffff808211156143dd578384fd5b6143e988838901613fc8565b945060408701519150808211156143fe578384fd5b61440a88838901613fc8565b9350606087015191508082111561441f578283fd5b5061442c87828801613fc8565b91505092959194509250565b6000806040838503121561444a578182fd5b823561445581615979565b9150602083013567ffffffffffffffff811115614470578182fd5b61447c85828601613dad565b9150509250929050565b6000806000806080858703121561449b578182fd5b84356144a681615979565b9350602085013567ffffffffffffffff808211156144c2578384fd5b6144ce88838901613f1c565b945060408701359150808211156144e3578384fd5b6144ef88838901613f1c565b93506060870135915080821115614504578283fd5b5061442c87828801613f7a565b60008060408385031215614523578182fd5b823561452e81615979565b9150602083013567ffffffffffffffff811115614549578182fd5b61447c85828601613f7a565b600080600060608486031215614569578081fd5b833561457481615979565b9250602084013567ffffffffffffffff81111561458f578182fd5b61459b86828701613f7a565b925050604084013590509250925092565b600080604083850312156145be578182fd5b82356145c981615979565b946020939093013593505050565b6000602082840312156145e8578081fd5b813567ffffffffffffffff8111156145fe578182fd5b61169a84828501613cdc565b60006020828403121561461b578081fd5b815167ffffffffffffffff811115614631578182fd5b61169a84828501613e08565b600080600060608486031215614651578081fd5b833567ffffffffffffffff80821115614668578283fd5b61467487838801613e63565b94506020860135915080821115614689578283fd5b61469587838801613cdc565b935060408601359150808211156146aa578283fd5b506146b786828701613f1c565b9150509250925092565b600080604083850312156146d3578182fd5b823567ffffffffffffffff808211156146ea578384fd5b6146f686838701613e63565b9350602085013591508082111561470b578283fd5b5061447c85828601613dad565b60008060006060848603121561472c578081fd5b835167ffffffffffffffff80821115614743578283fd5b61474f87838801613e08565b94506020860151915080821115614764578283fd5b61477087838801613ebe565b93506040860151915080821115614785578283fd5b506146b786828701613d48565b6000806000606084860312156147a6578081fd5b835167ffffffffffffffff808211156147bd578283fd5b6147c987838801613e08565b9450602086015193506040860151915080821115614785578283fd5b600080604083850312156147f7578182fd5b823567ffffffffffffffff8082111561480e578384fd5b6146f686838701613f1c565b6000806040838503121561482c578182fd5b825167ffffffffffffffff80821115614843578384fd5b61484f86838701613ebe565b93506020850151915080821115614864578283fd5b5061447c85828601613d48565b600060208284031215614882578081fd5b81518015158114610ceb578182fd5b600080600080608085870312156148a6578182fd5b8451935060208501516148b881615979565b604086015190935067ffffffffffffffff808211156143fe578384fd5b600080604083850312156148e7578182fd5b505080516020909101519092909150565b6000806040838503121561490a578182fd5b82519150602083015167ffffffffffffffff811115614927578182fd5b61447c85828601613fc8565b600080600060608486031215614947578081fd5b83519250602084015167ffffffffffffffff80821115614965578283fd5b61497187838801613fc8565b93506040860151915080821115614986578283fd5b506146b786828701613fc8565b600080604083850312156149a5578182fd5b8251915060208301516142fb8161598e565b600080604083850312156149c9578182fd5b82516001600160e01b0319811681146142ea578283fd5b6000602082840312156149f1578081fd5b813567ffffffffffffffff811115614a07578182fd5b61169a84828501613f7a565b600060608284031215614a24578081fd5b614a2e60606158a8565b614a3884846142a0565b815260208301516020820152604083015160408201528091505092915050565b600060208284031215614a69578081fd5b815167ffffffffffffffff811115614a7f578182fd5b61169a8482850161415d565b600080600060608486031215614a9f578081fd5b833567ffffffffffffffff811115614ab5578182fd5b614ac18682870161400e565b9350506020840135614ad281615979565b929592945050506040919091013590565b60008060408385031215614af5578182fd5b823567ffffffffffffffff80821115614b0c578384fd5b614b188683870161400e565b93506020850135915080821115614b2d578283fd5b5061447c85828601613f7a565b600080600060608486031215614b4e578081fd5b833567ffffffffffffffff811115614b64578182fd5b614b708682870161400e565b935050602084013591506040840135614b8881615979565b809150509250925092565b60008060008060808587031215614ba8578182fd5b845167ffffffffffffffff80821115614bbf578384fd5b614bcb8883890161415d565b95506020870151915080821115614be0578384fd5b6143e98883890161415d565b600080600060608486031215614c00578081fd5b835167ffffffffffffffff80821115614c17578283fd5b614c238783880161415d565b9450602086015193506040860151915080821115614986578283fd5b600080600060608486031215614c53578081fd5b833567ffffffffffffffff80821115614c6a578283fd5b81860160a08189031215614c7c578384fd5b614c8660a06158a8565b92508035835260208101356020840152604081013560408401526060810135614cae81615979565b6060840152608081013582811115614cc4578485fd5b614cd089828401613f7a565b608085015250919450505060208401359150614cef8560408601613cc6565b90509250925092565b600060208284031215614d09578081fd5b5051919050565b60008060408385031215614d22578182fd5b8251614d2d8161598e565b6020939093015192949293505050565b600080600060608486031215614d51578081fd5b8351614d5c8161598e565b602085015160408601519194509250614b8881615979565b60008060008060808587031215614d89578182fd5b614d9386866142a0565b9350602085015192506040850151614daa81615979565b606086015190925067ffffffffffffffff811115614dc6578182fd5b61442c87828801613fc8565b600080600060608486031215614de6578081fd5b614df085856142a0565b925060208401519150604084015167ffffffffffffffff811115614e12578182fd5b6146b786828701613fc8565b600080600060608486031215614e32578081fd5b614e3c85856142a0565b925060208401519150604084015190509250925092565b6001600160a01b03169052565b6000815180845260208401935060208301825b82811015614e9a5781516001600160a01b0316865260209586019590910190600101614e73565b5093949350505050565b600081518084526020840180819550602083028101915060208501845b84811015614eef578284038852614ed9848351614f2c565b6020988901989094509190910190600101614ec1565b50919695505050505050565b6000815180845260208401935060208301825b82811015614e9a578151865260209586019590910190600101614f0e565b60008151808452614f4481602086016020860161591e565b601f01601f19169290920160200192915050565b805160ff16825260208082015190830152604090810151910152565b60006101c0614f84848451614e53565b6020830151614f966020860182614e53565b506040830151614fa96040860182614e53565b506060830151614fbc6060860182614e53565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e085015261010080840151818601525061012080840151818601525061014080840151828287015261501583870182614f2c565b915050610160915081840151858203838701526150328282614f2c565b92505050610180808401518583038287015261504e8382614f2c565b9150506101a09150818401518582038387015261506b8282614f2c565b9695505050505050565b6000825161508781846020870161591e565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60006001600160a01b0386168252608060208301526151056080830186614efb565b82810360408401526151178186614efb565b83810360608501526151298186614f2c565b98975050505050505050565b60006001600160a01b0385168252606060208301526151576060830185614f2c565b9050826040830152949350505050565b60006001600160a01b0386168252608060208301526151896080830186614f2c565b82810360408401526151178186614f2c565b6001600160a01b03929092168252602082015260400190565b6000608082526151c76080830187614ea4565b82810360208401526151d98187614e60565b83810360408501526151eb8187614e60565b91505082810360608401526152008185614efb565b979650505050505050565b602080825282518282018190526000918401906040840190835b8181101561524b576152378451615913565b835260209384019390920191600101615225565b509095945050505050565b606080825284519082018190526000906020906080840190828801845b8281101561529957615286848351614f58565b6060939093019290840190600101615273565b505050838103828501526152ad8187614efb565b84810360408601528551808252908301915082860190845b818110156152e35782511515845292840192918401916001016152c5565b509198975050505050505050565b600060208252610ceb6020830184614efb565b6000604082526153176040830185614efb565b82810360208401526153298185614ea4565b95945050505050565b6000604082526153456040830185614efb565b82810360208401526153298185614efb565b90815260200190565b60008582526001600160a01b0385166020830152608060408301526153886080830185614f2c565b82810360608401526152008185614f2c565b918252602082015260400190565b60008382526040602083015261169a6040830184614f2c565b6000848252606060208301526153da6060830185614f2c565b828103604084015261506b8185614f2c565b828152604081016153fc8361596f565b8260208301529392505050565b6001600160e01b031991909116815260200190565b6001600160e01b03199290921682526001600160a01b0316602082015260400190565b60006001600160e01b0319871682526001600160a01b038616602083015260a0604083015261547360a0830186614efb565b82810360608401526154858186614efb565b83810360808501526154978186614f2c565b9998505050505050505050565b60006001600160e01b0319861682526001600160a01b0385166020830152608060408301526154d66080830185614f2c565b905082606083015295945050505050565b6001600160e01b03199390931683526001600160a01b03919091166020830152604082015260600190565b60006001600160e01b031985168252606060208301526155356060830185614efb565b828103604084015261506b8185614ea4565b600060208252610ceb6020830184614f2c565b60006080825261556d6080830187614f2c565b6001600160a01b03958616602084015293909416604082015260ff9190911660609091015292915050565b60006155a38561594e565b848252836020830152606060408301526153296060830184614f2c565b606081016155cd8561595b565b938152602081019290925260409091015290565b606081016155ee85615965565b93815260208101929092526001600160a01b031660409091015290565b604081016156188461595b565b9281526020015290565b606081016155cd85615965565b60608101600885106155cd57fe5b6020810161564a83615913565b825292915050565b600061565d8661596f565b8582528460208301526001600160a01b03841660408301526080606083015261506b6080830184614f2c565b604081016156188461594e565b6000608082526156a96080830187614f2c565b602083820381850152818751808452828401915082838202850101838a01865b838110156156f757601f198784030185526156e5838351614f74565b948601949250908501906001016156c9565b5050868103604088015261570b818a614efb565b94505050505082810360608401526152008185614ea4565b60208082526013908201527f554e4b4e4f574e5f52455455524e5f4441544100000000000000000000000000604082015260600190565b60208082526019908201527f554e4b4e4f574e5f46554e4354494f4e5f53454c4543544f5200000000000000604082015260600190565b6020808252600d908201527f554e494d504c454d454e54454400000000000000000000000000000000000000604082015260600190565b6020808252600c908201527f4241445f53454c4543544f520000000000000000000000000000000000000000604082015260600190565b6020808252600e908201527f57524f4e475f50524f58595f4944000000000000000000000000000000000000604082015260600190565b60a081016158448286614f58565b8360608301528215156080830152949350505050565b600060208252610ceb6020830184614f74565b6000604082526158806040830185614f74565b82810360208401526153298185614f2c565b9283526020830191909152604082015260600190565b60405181810167ffffffffffffffff811182821017156158c757600080fd5b604052919050565b600067ffffffffffffffff8211156158e5578081fd5b5060209081020190565b600067ffffffffffffffff821115615905578081fd5b50601f01601f191660200190565b8060058110610c9057fe5b60005b83811015615939578181015183820152602001615921565b83811115615948576000848401525b50505050565b6002811061595857fe5b50565b6004811061595857fe5b6003811061595857fe5b6007811061595857fe5b6001600160a01b038116811461595857600080fd5b60ff8116811461595857600080fdfea365627a7a72315820a6e2caf6b8cfb25159763e34dd839685d57e0d8a74ab5a72d4f2913f3fbccc436c6578706572696d656e74616cf564736f6c634300050d0040'; private readonly _methodABIIndex: { [name: string]: number } = {}; public static async deployFrom0xArtifactAsync( artifact: ContractArtifact | SimpleContractArtifact, @@ -138,6 +138,20 @@ export class DevUtilsContract extends BaseContract { stateMutability: 'nonpayable', type: 'constructor', }, + { + constant: true, + inputs: [], + name: 'EIP712_EXCHANGE_DOMAIN_HASH', + outputs: [ + { + name: '', + type: 'bytes32', + }, + ], + payable: false, + stateMutability: 'view', + type: 'function', + }, { constant: true, inputs: [ @@ -1066,6 +1080,91 @@ export class DevUtilsContract extends BaseContract { stateMutability: 'view', type: 'function', }, + { + constant: true, + inputs: [ + { + name: 'order', + type: 'tuple', + components: [ + { + name: 'makerAddress', + type: 'address', + }, + { + name: 'takerAddress', + type: 'address', + }, + { + name: 'feeRecipientAddress', + type: 'address', + }, + { + name: 'senderAddress', + type: 'address', + }, + { + name: 'makerAssetAmount', + type: 'uint256', + }, + { + name: 'takerAssetAmount', + type: 'uint256', + }, + { + name: 'makerFee', + type: 'uint256', + }, + { + name: 'takerFee', + type: 'uint256', + }, + { + name: 'expirationTimeSeconds', + type: 'uint256', + }, + { + name: 'salt', + type: 'uint256', + }, + { + name: 'makerAssetData', + type: 'bytes', + }, + { + name: 'takerAssetData', + type: 'bytes', + }, + { + name: 'makerFeeAssetData', + type: 'bytes', + }, + { + name: 'takerFeeAssetData', + type: 'bytes', + }, + ], + }, + { + name: 'chainId', + type: 'uint256', + }, + { + name: 'exchange', + type: 'address', + }, + ], + name: 'getOrderHash', + outputs: [ + { + name: 'orderHash', + type: 'bytes32', + }, + ], + payable: false, + stateMutability: 'pure', + type: 'function', + }, { constant: true, inputs: [ @@ -1442,6 +1541,55 @@ export class DevUtilsContract extends BaseContract { stateMutability: 'nonpayable', type: 'function', }, + { + constant: true, + inputs: [ + { + name: 'transaction', + type: 'tuple', + components: [ + { + name: 'salt', + type: 'uint256', + }, + { + name: 'expirationTimeSeconds', + type: 'uint256', + }, + { + name: 'gasPrice', + type: 'uint256', + }, + { + name: 'signerAddress', + type: 'address', + }, + { + name: 'data', + type: 'bytes', + }, + ], + }, + { + name: 'chainId', + type: 'uint256', + }, + { + name: 'exchange', + type: 'address', + }, + ], + name: 'getTransactionHash', + outputs: [ + { + name: 'transactionHash', + type: 'bytes32', + }, + ], + payable: false, + stateMutability: 'pure', + type: 'function', + }, { constant: true, inputs: [ @@ -1510,6 +1658,25 @@ export class DevUtilsContract extends BaseContract { return abiEncoder.getSelector(); } + public EIP712_EXCHANGE_DOMAIN_HASH(): ContractFunctionObj { + const self = (this as any) as DevUtilsContract; + const functionSignature = 'EIP712_EXCHANGE_DOMAIN_HASH()'; + + 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, []); + }, + }; + } /** * Decompose an ABI-encoded AssetProxyDispatchError. * @param encoded ABI-encoded revert error. @@ -2464,6 +2631,45 @@ export class DevUtilsContract extends BaseContract { }, }; } + public getOrderHash( + order: { + makerAddress: string; + takerAddress: string; + feeRecipientAddress: string; + senderAddress: string; + makerAssetAmount: BigNumber; + takerAssetAmount: BigNumber; + makerFee: BigNumber; + takerFee: BigNumber; + expirationTimeSeconds: BigNumber; + salt: BigNumber; + makerAssetData: string; + takerAssetData: string; + makerFeeAssetData: string; + takerFeeAssetData: string; + }, + chainId: BigNumber, + exchange: string, + ): ContractFunctionObj { + const self = (this as any) as DevUtilsContract; + + assert.isBigNumber('chainId', chainId); + assert.isString('exchange', exchange); + const functionSignature = + 'getOrderHash((address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,bytes,bytes),uint256,address)'; + + return { + async callAsync(callData: Partial = {}, defaultBlock?: BlockParam): Promise { + BaseContract._assertCallParams(callData, defaultBlock); + const rawCallResult = await self._evmExecAsync(this.getABIEncodedTransactionData()); + const abiEncoder = self._lookupAbiEncoder(functionSignature); + return abiEncoder.strictDecodeReturnValue(rawCallResult); + }, + getABIEncodedTransactionData(): string { + return self._strictEncodeArguments(functionSignature, [order, chainId, exchange.toLowerCase()]); + }, + }; + } /** * Fetches all order-relevant information needed to validate if the supplied order is fillable. * @param order The order structure. @@ -2751,6 +2957,35 @@ export class DevUtilsContract extends BaseContract { }, }; } + public getTransactionHash( + transaction: { + salt: BigNumber; + expirationTimeSeconds: BigNumber; + gasPrice: BigNumber; + signerAddress: string; + data: string; + }, + chainId: BigNumber, + exchange: string, + ): ContractFunctionObj { + const self = (this as any) as DevUtilsContract; + + assert.isBigNumber('chainId', chainId); + assert.isString('exchange', exchange); + const functionSignature = 'getTransactionHash((uint256,uint256,uint256,address,bytes),uint256,address)'; + + return { + async callAsync(callData: Partial = {}, defaultBlock?: BlockParam): Promise { + BaseContract._assertCallParams(callData, defaultBlock); + const rawCallResult = await self._evmExecAsync(this.getABIEncodedTransactionData()); + const abiEncoder = self._lookupAbiEncoder(functionSignature); + return abiEncoder.strictDecodeReturnValue(rawCallResult); + }, + getABIEncodedTransactionData(): string { + return self._strictEncodeArguments(functionSignature, [transaction, chainId, exchange.toLowerCase()]); + }, + }; + } /** * Gets the amount of an asset transferable by the owner. * @param ownerAddress Address of the owner of the asset. diff --git a/packages/asset-swapper/docs/reference.mdx b/packages/asset-swapper/docs/reference.mdx index 2ab4317237..caf6cbe05a 100644 --- a/packages/asset-swapper/docs/reference.mdx +++ b/packages/asset-swapper/docs/reference.mdx @@ -1,73 +1,42 @@ -# Class: InsufficientAssetLiquidityError +# Interface: Web3JsV1Provider -Error class representing insufficient asset liquidity +Web3.js version 1 provider interface +This provider interface was implemented in the pre-1.0Beta releases for Web3.js. +This interface allowed sending synchonous requests, support for which was later dropped. -## Constructors +## Methods +### send +▸ **send**(`payload`: [JSONRPCRequestPayload](_ethereum_types_src_index_.jsonrpcrequestpayload.md)): *[JSONRPCResponsePayload](#class-jsonrpcresponsepayload)* -\+ **new InsufficientAssetLiquidityError**(`amountAvailableToFill`: `BigNumber`): *[InsufficientAssetLiquidityError](#class-insufficientassetliquidityerror)* - -*Defined in [asset-swapper/src/errors.ts:12](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/errors.ts#L12)* +*Defined in [ethereum-types/src/index.ts:45](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/ethereum-types/src/index.ts#L45)* **Parameters:** -Name | Type | Description | ------- | ------ | ------ | -`amountAvailableToFill` | `BigNumber` | The amount availabe to fill (in base units) factoring in slippage | +Name | Type | +------ | ------ | +`payload` | [JSONRPCRequestPayload](#class-jsonrpcrequestpayload) | -**Returns:** *[InsufficientAssetLiquidityError](#class-insufficientassetliquidityerror)* - -## Properties - -### amountAvailableToFill - -• **amountAvailableToFill**: *`BigNumber`* - -*Defined in [asset-swapper/src/errors.ts:12](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/errors.ts#L12)* - -The amount availabe to fill (in base units) factoring in slippage. +**Returns:** *[JSONRPCResponsePayload](#class-jsonrpcresponsepayload)* ___ -### message +### sendAsync -• **message**: *string* +▸ **sendAsync**(`payload`: [JSONRPCRequestPayload](_ethereum_types_src_index_.jsonrpcrequestpayload.md), `callback`: [JSONRPCErrorCallback](#jsonrpcerrorcallback)): *void* +*Defined in [ethereum-types/src/index.ts:44](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/ethereum-types/src/index.ts#L44)* +**Parameters:** +Name | Type | +------ | ------ | +`payload` | [JSONRPCRequestPayload](#class-jsonrpcrequestpayload) | +`callback` | [JSONRPCErrorCallback](#jsonrpcerrorcallback) | - -___ - -### name - -• **name**: *string* - - - - - -___ - -### `Optional` stack - -• **stack**? : *undefined | string* - - - -*Overrides void* - - - -___ - -### `Static` Error - -▪ **Error**: *`ErrorConstructor`* - - +**Returns:** *void*
@@ -85,7 +54,7 @@ ___ \+ **new SwapQuoteConsumer**(`supportedProvider`: [SupportedProvider](#supportedprovider), `options`: `Partial`): *[SwapQuoteConsumer](#class-swapquoteconsumer)* -*Defined in [asset-swapper/src/quote_consumers/swap_quote_consumer.ts:38](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/quote_consumers/swap_quote_consumer.ts#L38)* +*Defined in [asset-swapper/src/quote_consumers/swap_quote_consumer.ts:39](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/quote_consumers/swap_quote_consumer.ts#L39)* **Parameters:** @@ -102,7 +71,7 @@ Name | Type | Default | • **chainId**: *number* -*Defined in [asset-swapper/src/quote_consumers/swap_quote_consumer.ts:27](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/quote_consumers/swap_quote_consumer.ts#L27)* +*Defined in [asset-swapper/src/quote_consumers/swap_quote_consumer.ts:28](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/quote_consumers/swap_quote_consumer.ts#L28)* ___ @@ -110,17 +79,17 @@ ___ • **provider**: *`ZeroExProvider`* -*Defined in [asset-swapper/src/quote_consumers/swap_quote_consumer.ts:26](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/quote_consumers/swap_quote_consumer.ts#L26)* +*Defined in [asset-swapper/src/quote_consumers/swap_quote_consumer.ts:27](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/quote_consumers/swap_quote_consumer.ts#L27)* ## Methods ### executeSwapQuoteOrThrowAsync -▸ **executeSwapQuoteOrThrowAsync**(`quote`: [SwapQuote](#swapquote), `opts`: `Partial`): *`Promise`* +▸ **executeSwapQuoteOrThrowAsync**(`quote`: [SwapQuote](#swapquote), `opts`: `Partial`): *`Promise`* *Implementation of [SwapQuoteConsumerBase](#interface-swapquoteconsumerbase)* -*Defined in [asset-swapper/src/quote_consumers/swap_quote_consumer.ts:85](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/quote_consumers/swap_quote_consumer.ts#L85)* +*Defined in [asset-swapper/src/quote_consumers/swap_quote_consumer.ts:89](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/quote_consumers/swap_quote_consumer.ts#L89)* Given a SwapQuote and desired rate (in takerAsset), attempt to execute the swap with 0x extension or exchange contract. @@ -129,7 +98,7 @@ Given a SwapQuote and desired rate (in takerAsset), attempt to execute the swap Name | Type | Default | Description | ------ | ------ | ------ | ------ | `quote` | [SwapQuote](#swapquote) | - | An object that conforms to SwapQuote. See type definition for more information. | -`opts` | `Partial` | {} | Options for getting CalldataInfo. See type definition for more information. | +`opts` | `Partial` | {} | Options for getting CalldataInfo. See type definition for more information. | **Returns:** *`Promise`* @@ -137,11 +106,11 @@ ___ ### getCalldataOrThrowAsync -▸ **getCalldataOrThrowAsync**(`quote`: [SwapQuote](#swapquote), `opts`: `Partial`): *`Promise`* +▸ **getCalldataOrThrowAsync**(`quote`: [SwapQuote](#swapquote), `opts`: `Partial`): *`Promise`* *Implementation of [SwapQuoteConsumerBase](#interface-swapquoteconsumerbase)* -*Defined in [asset-swapper/src/quote_consumers/swap_quote_consumer.ts:57](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/quote_consumers/swap_quote_consumer.ts#L57)* +*Defined in [asset-swapper/src/quote_consumers/swap_quote_consumer.ts:61](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/quote_consumers/swap_quote_consumer.ts#L61)* Given a SwapQuote, returns 'CalldataInfo' for a 0x extesion or exchange call. See type definition of CalldataInfo for more information. @@ -150,7 +119,7 @@ Given a SwapQuote, returns 'CalldataInfo' for a 0x extesion or exchange call. Se Name | Type | Default | Description | ------ | ------ | ------ | ------ | `quote` | [SwapQuote](#swapquote) | - | An object that conforms to SwapQuote. See type definition for more information. | -`opts` | `Partial` | {} | Options for getting SmartContractParams. See type definition for more information. | +`opts` | `Partial` | {} | Options for getting SmartContractParams. See type definition for more information. | **Returns:** *`Promise`* @@ -160,7 +129,7 @@ ___ ▸ **getOptimalExtensionContractTypeAsync**(`quote`: [SwapQuote](#swapquote), `opts`: `Partial`): *`Promise`* -*Defined in [asset-swapper/src/quote_consumers/swap_quote_consumer.ts:99](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/quote_consumers/swap_quote_consumer.ts#L99)* +*Defined in [asset-swapper/src/quote_consumers/swap_quote_consumer.ts:103](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/quote_consumers/swap_quote_consumer.ts#L103)* Given a SwapQuote, returns optimal 0x protocol interface (extension or no extension) to perform the swap. @@ -177,11 +146,11 @@ ___ ### getSmartContractParamsOrThrowAsync -▸ **getSmartContractParamsOrThrowAsync**(`quote`: [SwapQuote](#swapquote), `opts`: `Partial`): *`Promise>`* +▸ **getSmartContractParamsOrThrowAsync**(`quote`: [SwapQuote](#swapquote), `opts`: `Partial`): *`Promise>`* *Implementation of [SwapQuoteConsumerBase](#interface-swapquoteconsumerbase)* -*Defined in [asset-swapper/src/quote_consumers/swap_quote_consumer.ts:71](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/quote_consumers/swap_quote_consumer.ts#L71)* +*Defined in [asset-swapper/src/quote_consumers/swap_quote_consumer.ts:75](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/quote_consumers/swap_quote_consumer.ts#L75)* Given a SwapQuote, returns 'SmartContractParamsInfo' for a 0x extension or exchange call. See type definition of SmartContractParamsInfo for more information. @@ -190,7 +159,7 @@ Given a SwapQuote, returns 'SmartContractParamsInfo' for a 0x extension or excha Name | Type | Default | Description | ------ | ------ | ------ | ------ | `quote` | [SwapQuote](#swapquote) | - | An object that conforms to SwapQuote. See type definition for more information. | -`opts` | `Partial` | {} | Options for getting SmartContractParams. See type definition for more information. | +`opts` | `Partial` | {} | Options for getting SmartContractParams. See type definition for more information. | **Returns:** *`Promise>`* @@ -200,7 +169,7 @@ ___ ▸ **getSwapQuoteConsumer**(`supportedProvider`: [SupportedProvider](#supportedprovider), `options`: `Partial`): *[SwapQuoteConsumer](#class-swapquoteconsumer)* -*Defined in [asset-swapper/src/quote_consumers/swap_quote_consumer.ts:33](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/quote_consumers/swap_quote_consumer.ts#L33)* +*Defined in [asset-swapper/src/quote_consumers/swap_quote_consumer.ts:34](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/quote_consumers/swap_quote_consumer.ts#L34)* **Parameters:** @@ -222,7 +191,7 @@ Name | Type | Default | \+ **new SwapQuoter**(`supportedProvider`: [SupportedProvider](#supportedprovider), `orderbook`: `Orderbook`, `options`: `Partial`): *[SwapQuoter](#class-swapquoter)* -*Defined in [asset-swapper/src/swap_quoter.ts:132](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/swap_quoter.ts#L132)* +*Defined in [asset-swapper/src/swap_quoter.ts:129](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/swap_quoter.ts#L129)* Instantiates a new SwapQuoter instance @@ -240,19 +209,11 @@ An instance of SwapQuoter ## Properties -### chainId - -• **chainId**: *number* - -*Defined in [asset-swapper/src/swap_quoter.ts:34](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/swap_quoter.ts#L34)* - -___ - ### expiryBufferMs • **expiryBufferMs**: *number* -*Defined in [asset-swapper/src/swap_quoter.ts:33](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/swap_quoter.ts#L33)* +*Defined in [asset-swapper/src/swap_quoter.ts:32](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/swap_quoter.ts#L32)* ___ @@ -260,7 +221,7 @@ ___ • **orderbook**: *`Orderbook`* -*Defined in [asset-swapper/src/swap_quoter.ts:32](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/swap_quoter.ts#L32)* +*Defined in [asset-swapper/src/swap_quoter.ts:31](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/swap_quoter.ts#L31)* ___ @@ -268,7 +229,7 @@ ___ • **permittedOrderFeeTypes**: *`Set`* -*Defined in [asset-swapper/src/swap_quoter.ts:35](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/swap_quoter.ts#L35)* +*Defined in [asset-swapper/src/swap_quoter.ts:33](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/swap_quoter.ts#L33)* ___ @@ -276,7 +237,7 @@ ___ • **provider**: *`ZeroExProvider`* -*Defined in [asset-swapper/src/swap_quoter.ts:31](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/swap_quoter.ts#L31)* +*Defined in [asset-swapper/src/swap_quoter.ts:30](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/swap_quoter.ts#L30)* ## Methods @@ -284,7 +245,7 @@ ___ ▸ **destroyAsync**(): *`Promise`* -*Defined in [asset-swapper/src/swap_quoter.ts:397](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/swap_quoter.ts#L397)* +*Defined in [asset-swapper/src/swap_quoter.ts:393](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/swap_quoter.ts#L393)* Destroys any subscriptions or connections. @@ -296,7 +257,7 @@ ___ ▸ **getAvailableMakerAssetDatasAsync**(`takerAssetData`: string): *`Promise`* -*Defined in [asset-swapper/src/swap_quoter.ts:326](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/swap_quoter.ts#L326)* +*Defined in [asset-swapper/src/swap_quoter.ts:321](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/swap_quoter.ts#L321)* Get the asset data of all assets that are purchaseable with takerAssetData in the order provider passed in at init. @@ -316,7 +277,7 @@ ___ ▸ **getAvailableTakerAssetDatasAsync**(`makerAssetData`: string): *`Promise`* -*Defined in [asset-swapper/src/swap_quoter.ts:311](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/swap_quoter.ts#L311)* +*Defined in [asset-swapper/src/swap_quoter.ts:306](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/swap_quoter.ts#L306)* Get the asset data of all assets that can be used to purchase makerAssetData in the order provider passed in at init. @@ -336,7 +297,7 @@ ___ ▸ **getEtherTokenAssetDataOrThrowAsync**(): *`Promise`* -*Defined in [asset-swapper/src/swap_quoter.ts:404](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/swap_quoter.ts#L404)* +*Defined in [asset-swapper/src/swap_quoter.ts:400](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/swap_quoter.ts#L400)* Utility function to get assetData for Ether token. @@ -348,7 +309,7 @@ ___ ▸ **getLiquidityForMakerTakerAssetDataPairAsync**(`makerAssetData`: string, `takerAssetData`: string): *`Promise`* -*Defined in [asset-swapper/src/swap_quoter.ts:286](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/swap_quoter.ts#L286)* +*Defined in [asset-swapper/src/swap_quoter.ts:281](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/swap_quoter.ts#L281)* Returns information about available liquidity for an asset Does not factor in slippage or fees @@ -368,9 +329,9 @@ ___ ### getMarketBuySwapQuoteAsync -▸ **getMarketBuySwapQuoteAsync**(`makerTokenAddress`: string, `takerTokenAddress`: string, `makerAssetBuyAmount`: `BigNumber`, `options`: `Partial`): *`Promise`* +▸ **getMarketBuySwapQuoteAsync**(`makerTokenAddress`: string, `takerTokenAddress`: string, `makerAssetBuyAmount`: `BigNumber`, `options`: `Partial`): *`Promise`* -*Defined in [asset-swapper/src/swap_quoter.ts:228](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/swap_quoter.ts#L228)* +*Defined in [asset-swapper/src/swap_quoter.ts:223](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/swap_quoter.ts#L223)* Get a `SwapQuote` containing all information relevant to fulfilling a swap between a desired ERC20 token address and ERC20 owned by a provided address. You can then pass the `SwapQuote` to a `SwapQuoteConsumer` to execute a buy, or process SwapQuote for on-chain consumption. @@ -384,7 +345,7 @@ Name | Type | Default | Description | `makerAssetBuyAmount` | `BigNumber` | - | The amount of maker asset to swap for. | `options` | `Partial` | {} | Options for the request. See type definition for more information. | -**Returns:** *`Promise`* +**Returns:** *`Promise`* An object that conforms to SwapQuote that satisfies the request. See type definition for more information. @@ -394,7 +355,7 @@ ___ ▸ **getMarketBuySwapQuoteForAssetDataAsync**(`makerAssetData`: string, `takerAssetData`: string, `makerAssetBuyAmount`: `BigNumber`, `options`: `Partial`): *`Promise`* -*Defined in [asset-swapper/src/swap_quoter.ts:203](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/swap_quoter.ts#L203)* +*Defined in [asset-swapper/src/swap_quoter.ts:198](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/swap_quoter.ts#L198)* Get a `SwapQuote` containing all information relevant to fulfilling a swap between a desired ERC20 token address and ERC20 owned by a provided address. You can then pass the `SwapQuote` to a `SwapQuoteConsumer` to execute a buy, or process SwapQuote for on-chain consumption. @@ -416,9 +377,9 @@ ___ ### getMarketSellSwapQuoteAsync -▸ **getMarketSellSwapQuoteAsync**(`makerTokenAddress`: string, `takerTokenAddress`: string, `takerAssetSellAmount`: `BigNumber`, `options`: `Partial`): *`Promise`* +▸ **getMarketSellSwapQuoteAsync**(`makerTokenAddress`: string, `takerTokenAddress`: string, `takerAssetSellAmount`: `BigNumber`, `options`: `Partial`): *`Promise`* -*Defined in [asset-swapper/src/swap_quoter.ts:258](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/swap_quoter.ts#L258)* +*Defined in [asset-swapper/src/swap_quoter.ts:253](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/swap_quoter.ts#L253)* Get a `SwapQuote` containing all information relevant to fulfilling a swap between a desired ERC20 token address and ERC20 owned by a provided address. You can then pass the `SwapQuote` to a `SwapQuoteConsumer` to execute a buy, or process SwapQuote for on-chain consumption. @@ -432,7 +393,7 @@ Name | Type | Default | Description | `takerAssetSellAmount` | `BigNumber` | - | The amount of taker asset to sell. | `options` | `Partial` | {} | Options for the request. See type definition for more information. | -**Returns:** *`Promise`* +**Returns:** *`Promise`* An object that conforms to SwapQuote that satisfies the request. See type definition for more information. @@ -442,7 +403,7 @@ ___ ▸ **getMarketSellSwapQuoteForAssetDataAsync**(`makerAssetData`: string, `takerAssetData`: string, `takerAssetSellAmount`: `BigNumber`, `options`: `Partial`): *`Promise`* -*Defined in [asset-swapper/src/swap_quoter.ts:177](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/swap_quoter.ts#L177)* +*Defined in [asset-swapper/src/swap_quoter.ts:172](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/swap_quoter.ts#L172)* Get a `SwapQuote` containing all information relevant to fulfilling a swap between a desired ERC20 token address and ERC20 owned by a provided address. You can then pass the `SwapQuote` to a `SwapQuoteConsumer` to execute a buy, or process SwapQuote for on-chain consumption. @@ -466,7 +427,7 @@ ___ ▸ **getPrunedSignedOrdersAsync**(`makerAssetData`: string, `takerAssetData`: string): *`Promise`* -*Defined in [asset-swapper/src/swap_quoter.ts:360](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/swap_quoter.ts#L360)* +*Defined in [asset-swapper/src/swap_quoter.ts:355](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/swap_quoter.ts#L355)* Grab orders from the order provider, prunes for valid orders with provided OrderPruner options @@ -485,7 +446,7 @@ ___ ▸ **isSwapQuoteFillableByTakerAddressAsync**(`swapQuote`: [SwapQuote](#swapquote), `takerAddress`: string): *`Promise<[boolean, boolean]>`* -*Defined in [asset-swapper/src/swap_quoter.ts:381](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/swap_quoter.ts#L381)* +*Defined in [asset-swapper/src/swap_quoter.ts:376](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/swap_quoter.ts#L376)* Util function to check if takerAddress's allowance is enough for 0x exchange contracts to conduct the swap specified by the swapQuote. @@ -504,7 +465,7 @@ ___ ▸ **isTakerMakerAssetDataPairAvailableAsync**(`makerAssetData`: string, `takerAssetData`: string): *`Promise`* -*Defined in [asset-swapper/src/swap_quoter.ts:343](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/swap_quoter.ts#L343)* +*Defined in [asset-swapper/src/swap_quoter.ts:338](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/swap_quoter.ts#L338)* Validates the taker + maker asset pair is available from the order provider provided to `SwapQuote`. @@ -525,7 +486,7 @@ ___ ▸ **getSwapQuoterForMeshEndpoint**(`supportedProvider`: [SupportedProvider](#supportedprovider), `meshEndpoint`: string, `options`: `Partial`): *[SwapQuoter](#class-swapquoter)* -*Defined in [asset-swapper/src/swap_quoter.ts:119](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/swap_quoter.ts#L119)* +*Defined in [asset-swapper/src/swap_quoter.ts:116](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/swap_quoter.ts#L116)* Instantiates a new SwapQuoter instance given a 0x Mesh endpoint. This pulls all available liquidity stored in Mesh @@ -547,7 +508,7 @@ ___ ▸ **getSwapQuoterForProvidedOrders**(`supportedProvider`: [SupportedProvider](#supportedprovider), `orders`: `SignedOrder`[], `options`: `Partial`): *[SwapQuoter](#class-swapquoter)* -*Defined in [asset-swapper/src/swap_quoter.ts:49](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/swap_quoter.ts#L49)* +*Defined in [asset-swapper/src/swap_quoter.ts:44](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/swap_quoter.ts#L44)* Instantiates a new SwapQuoter instance given existing liquidity in the form of orders and feeOrders. @@ -569,7 +530,7 @@ ___ ▸ **getSwapQuoterForStandardRelayerAPIUrl**(`supportedProvider`: [SupportedProvider](#supportedprovider), `sraApiUrl`: string, `options`: `Partial`): *[SwapQuoter](#class-swapquoter)* -*Defined in [asset-swapper/src/swap_quoter.ts:69](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/swap_quoter.ts#L69)* +*Defined in [asset-swapper/src/swap_quoter.ts:64](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/swap_quoter.ts#L64)* Instantiates a new SwapQuoter instance given a [Standard Relayer API](https://github.com/0xProject/standard-relayer-api) endpoint @@ -591,7 +552,7 @@ ___ ▸ **getSwapQuoterForStandardRelayerAPIWebsocket**(`supportedProvider`: [SupportedProvider](#supportedprovider), `sraApiUrl`: string, `sraWebsocketAPIUrl`: string, `options`: `Partial`): *[SwapQuoter](#class-swapquoter)* -*Defined in [asset-swapper/src/swap_quoter.ts:95](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/swap_quoter.ts#L95)* +*Defined in [asset-swapper/src/swap_quoter.ts:91](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/swap_quoter.ts#L91)* Instantiates a new SwapQuoter instance given a [Standard Relayer API](https://github.com/0xProject/standard-relayer-api) endpoint and a websocket endpoint. This is more effecient than `getSwapQuoterForStandardRelayerAPIUrl` when requesting multiple quotes. @@ -611,54 +572,6 @@ An instance of SwapQuoter
-# Class: ProtocolFeeUtils - - -## Methods - -### calculateWorstCaseProtocolFeeAsync - -â–¸ **calculateWorstCaseProtocolFeeAsync**<**T**>(`orders`: `T`[], `gasPrice`: `BigNumber`): *`Promise`* - -*Defined in [asset-swapper/src/utils/protocol_fee_utils.ts:29](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/utils/protocol_fee_utils.ts#L29)* - -Calculates protocol fee with protofol fee multiplier for each fill. - -**Type parameters:** - -â–ª **T**: *`Order`* - -**Parameters:** - -Name | Type | ------- | ------ | -`orders` | `T`[] | -`gasPrice` | `BigNumber` | - -**Returns:** *`Promise`* - -___ - -### getGasPriceEstimationOrThrowAsync - -â–¸ **getGasPriceEstimationOrThrowAsync**(): *`Promise`* - -*Defined in [asset-swapper/src/utils/protocol_fee_utils.ts:15](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/utils/protocol_fee_utils.ts#L15)* - -**Returns:** *`Promise`* - -___ - -### getProtocolFeeMultiplierAsync - -â–¸ **getProtocolFeeMultiplierAsync**(): *`Promise`* - -*Defined in [asset-swapper/src/utils/protocol_fee_utils.ts:10](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/utils/protocol_fee_utils.ts#L10)* - -**Returns:** *`Promise`* - -
- # Class: BaseOrderProvider @@ -668,7 +581,7 @@ ___ \+ **new BaseOrderProvider**(`orderStore`: [OrderStore](_orderbook_src_order_store_.orderstore.md)): *[BaseOrderProvider](#class-baseorderprovider)* -*Defined in [orderbook/src/order_provider/base_order_provider.ts:12](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/orderbook/src/order_provider/base_order_provider.ts#L12)* +*Defined in [orderbook/src/order_provider/base_order_provider.ts:12](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/order_provider/base_order_provider.ts#L12)* **Parameters:** @@ -684,7 +597,7 @@ Name | Type | • **_orderStore**: *[OrderStore](#class-orderstore)* -*Defined in [orderbook/src/order_provider/base_order_provider.ts:12](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/orderbook/src/order_provider/base_order_provider.ts#L12)* +*Defined in [orderbook/src/order_provider/base_order_provider.ts:12](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/order_provider/base_order_provider.ts#L12)* ## Methods @@ -692,7 +605,7 @@ Name | Type | ▸ **addOrdersAsync**(`orders`: `SignedOrder`[]): *`Promise`* -*Defined in [orderbook/src/order_provider/base_order_provider.ts:27](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/orderbook/src/order_provider/base_order_provider.ts#L27)* +*Defined in [orderbook/src/order_provider/base_order_provider.ts:27](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/order_provider/base_order_provider.ts#L27)* **Parameters:** @@ -708,7 +621,7 @@ ___ ▸ **createSubscriptionForAssetPairAsync**(`makerAssetData`: string, `takerAssetData`: string): *`Promise`* -*Defined in [orderbook/src/order_provider/base_order_provider.ts:18](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/orderbook/src/order_provider/base_order_provider.ts#L18)* +*Defined in [orderbook/src/order_provider/base_order_provider.ts:18](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/order_provider/base_order_provider.ts#L18)* **Parameters:** @@ -725,7 +638,7 @@ ___ ▸ **destroyAsync**(): *`Promise`* -*Defined in [orderbook/src/order_provider/base_order_provider.ts:25](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/orderbook/src/order_provider/base_order_provider.ts#L25)* +*Defined in [orderbook/src/order_provider/base_order_provider.ts:25](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/order_provider/base_order_provider.ts#L25)* **Returns:** *`Promise`* @@ -735,7 +648,7 @@ ___ ▸ **getAvailableAssetDatasAsync**(): *`Promise`* -*Defined in [orderbook/src/order_provider/base_order_provider.ts:23](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/orderbook/src/order_provider/base_order_provider.ts#L23)* +*Defined in [orderbook/src/order_provider/base_order_provider.ts:23](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/order_provider/base_order_provider.ts#L23)* **Returns:** *`Promise`* @@ -748,19 +661,25 @@ ___ -\+ **new OrderSet**(): *[OrderSet](#class-orderset)* +\+ **new OrderSet**(`orders`: `APIOrder`[]): *[OrderSet](#class-orderset)* -*Defined in [orderbook/src/order_set.ts:6](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/orderbook/src/order_set.ts#L6)* +*Defined in [orderbook/src/order_set.ts:6](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/order_set.ts#L6)* + +**Parameters:** + +Name | Type | Default | +------ | ------ | ------ | +`orders` | `APIOrder`[] | [] | **Returns:** *[OrderSet](#class-orderset)* ## Methods -### addAsync +### add -▸ **addAsync**(`item`: `APIOrder`): *`Promise`* +▸ **add**(`item`: `APIOrder`): *void* -*Defined in [orderbook/src/order_set.ts:16](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/orderbook/src/order_set.ts#L16)* +*Defined in [orderbook/src/order_set.ts:19](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/order_set.ts#L19)* **Parameters:** @@ -768,15 +687,15 @@ Name | Type | ------ | ------ | `item` | `APIOrder` | -**Returns:** *`Promise`* +**Returns:** *void* ___ -### addManyAsync +### addMany -▸ **addManyAsync**(`items`: `APIOrder`[]): *`Promise`* +▸ **addMany**(`items`: `APIOrder`[]): *void* -*Defined in [orderbook/src/order_set.ts:22](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/orderbook/src/order_set.ts#L22)* +*Defined in [orderbook/src/order_set.ts:25](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/order_set.ts#L25)* **Parameters:** @@ -784,15 +703,15 @@ Name | Type | ------ | ------ | `items` | `APIOrder`[] | -**Returns:** *`Promise`* +**Returns:** *void* ___ -### deleteAsync +### delete -▸ **deleteAsync**(`item`: `APIOrder`): *`Promise`* +▸ **delete**(`item`: `APIOrder`): *boolean* -*Defined in [orderbook/src/order_set.ts:54](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/orderbook/src/order_set.ts#L54)* +*Defined in [orderbook/src/order_set.ts:57](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/order_set.ts#L57)* **Parameters:** @@ -800,15 +719,15 @@ Name | Type | ------ | ------ | `item` | `APIOrder` | -**Returns:** *`Promise`* +**Returns:** *boolean* ___ -### deleteManyAsync +### deleteMany -▸ **deleteManyAsync**(`items`: `APIOrder`[]): *`Promise`* +▸ **deleteMany**(`items`: `APIOrder`[]): *void* -*Defined in [orderbook/src/order_set.ts:58](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/orderbook/src/order_set.ts#L58)* +*Defined in [orderbook/src/order_set.ts:61](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/order_set.ts#L61)* **Parameters:** @@ -816,15 +735,15 @@ Name | Type | ------ | ------ | `items` | `APIOrder`[] | -**Returns:** *`Promise`* +**Returns:** *void* ___ -### diffAsync +### diff -▸ **diffAsync**(`other`: [OrderSet](#class-orderset)): *`Promise`* +▸ **diff**(`other`: [OrderSet](#class-orderset)): *object* -*Defined in [orderbook/src/order_set.ts:32](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/orderbook/src/order_set.ts#L32)* +*Defined in [orderbook/src/order_set.ts:35](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/order_set.ts#L35)* **Parameters:** @@ -832,15 +751,15 @@ Name | Type | ------ | ------ | `other` | [OrderSet](#class-orderset) | -**Returns:** *`Promise`* +**Returns:** *object* ___ -### hasAsync +### has -▸ **hasAsync**(`order`: `APIOrder`): *`Promise`* +▸ **has**(`order`: `APIOrder`): *boolean* -*Defined in [orderbook/src/order_set.ts:28](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/orderbook/src/order_set.ts#L28)* +*Defined in [orderbook/src/order_set.ts:31](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/order_set.ts#L31)* **Parameters:** @@ -848,7 +767,7 @@ Name | Type | ------ | ------ | `order` | `APIOrder` | -**Returns:** *`Promise`* +**Returns:** *boolean* ___ @@ -856,7 +775,7 @@ ___ ▸ **size**(): *number* -*Defined in [orderbook/src/order_set.ts:12](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/orderbook/src/order_set.ts#L12)* +*Defined in [orderbook/src/order_set.ts:15](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/order_set.ts#L15)* **Returns:** *number* @@ -866,7 +785,7 @@ ___ ▸ **values**(): *`IterableIterator`* -*Defined in [orderbook/src/order_set.ts:50](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/orderbook/src/order_set.ts#L50)* +*Defined in [orderbook/src/order_set.ts:53](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/order_set.ts#L53)* **Returns:** *`IterableIterator`* @@ -881,7 +800,7 @@ ___ ▸ **getOrderSetForAssetPair**(`assetPairKey`: string): *[OrderSet](#class-orderset)* -*Defined in [orderbook/src/order_store.ts:19](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/orderbook/src/order_store.ts#L19)* +*Defined in [orderbook/src/order_store.ts:19](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/order_store.ts#L19)* **Parameters:** @@ -897,7 +816,7 @@ ___ ▸ **getOrderSetForAssets**(`makerAssetData`: string, `takerAssetData`: string): *[OrderSet](#class-orderset)* -*Defined in [orderbook/src/order_store.ts:15](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/orderbook/src/order_store.ts#L15)* +*Defined in [orderbook/src/order_store.ts:15](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/order_store.ts#L15)* **Parameters:** @@ -914,7 +833,7 @@ ___ ▸ **has**(`assetPairKey`: string): *boolean* -*Defined in [orderbook/src/order_store.ts:34](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/orderbook/src/order_store.ts#L34)* +*Defined in [orderbook/src/order_store.ts:34](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/order_store.ts#L34)* **Parameters:** @@ -930,17 +849,17 @@ ___ ▸ **keys**(): *`IterableIterator`* -*Defined in [orderbook/src/order_store.ts:40](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/orderbook/src/order_store.ts#L40)* +*Defined in [orderbook/src/order_store.ts:40](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/order_store.ts#L40)* **Returns:** *`IterableIterator`* ___ -### updateAsync +### update -▸ **updateAsync**(`addedRemoved`: [AddedRemovedOrders](#interface-addedremovedorders)): *`Promise`* +▸ **update**(`addedRemoved`: [AddedRemovedOrders](#interface-addedremovedorders)): *void* -*Defined in [orderbook/src/order_store.ts:28](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/orderbook/src/order_store.ts#L28)* +*Defined in [orderbook/src/order_store.ts:28](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/order_store.ts#L28)* **Parameters:** @@ -948,7 +867,7 @@ Name | Type | ------ | ------ | `addedRemoved` | [AddedRemovedOrders](#interface-addedremovedorders) | -**Returns:** *`Promise`* +**Returns:** *void* ___ @@ -956,7 +875,7 @@ ___ ▸ **values**(`assetPairKey`: string): *`APIOrder`[]* -*Defined in [orderbook/src/order_store.ts:37](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/orderbook/src/order_store.ts#L37)* +*Defined in [orderbook/src/order_store.ts:37](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/order_store.ts#L37)* **Parameters:** @@ -972,7 +891,7 @@ ___ ▸ **assetPairKeyToAssets**(`assetPairKey`: string): *string[]* -*Defined in [orderbook/src/order_store.ts:12](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/orderbook/src/order_store.ts#L12)* +*Defined in [orderbook/src/order_store.ts:12](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/order_store.ts#L12)* **Parameters:** @@ -988,7 +907,7 @@ ___ ▸ **getKeyForAssetPair**(`makerAssetData`: string, `takerAssetData`: string): *string* -*Defined in [orderbook/src/order_store.ts:9](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/orderbook/src/order_store.ts#L9)* +*Defined in [orderbook/src/order_store.ts:9](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/order_store.ts#L9)* **Parameters:** @@ -1010,7 +929,7 @@ Name | Type | \+ **new Orderbook**(`orderProvider`: [BaseOrderProvider](_orderbook_src_order_provider_base_order_provider_.baseorderprovider.md), `orderStore`: [OrderStore](_orderbook_src_order_store_.orderstore.md)): *[Orderbook](#class-orderbook)* -*Defined in [orderbook/src/orderbook.ts:55](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/orderbook/src/orderbook.ts#L55)* +*Defined in [orderbook/src/orderbook.ts:55](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/orderbook.ts#L55)* Creates an Orderbook with the order provider. All order updates are stored in the `OrderStore`. @@ -1030,7 +949,7 @@ Name | Type | Description | ▸ **addOrdersAsync**(`orders`: `SignedOrder`[]): *`Promise`* -*Defined in [orderbook/src/orderbook.ts:98](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/orderbook/src/orderbook.ts#L98)* +*Defined in [orderbook/src/orderbook.ts:98](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/orderbook.ts#L98)* Adds the orders to the Order Provider. All accepted orders will be returned and rejected orders will be returned with an message indicating a reason for its rejection @@ -1049,7 +968,7 @@ ___ ▸ **destroyAsync**(): *`Promise`* -*Defined in [orderbook/src/orderbook.ts:104](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/orderbook/src/orderbook.ts#L104)* +*Defined in [orderbook/src/orderbook.ts:104](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/orderbook.ts#L104)* Destroys any subscriptions or connections. @@ -1061,7 +980,7 @@ ___ ▸ **getAvailableAssetDatasAsync**(): *`Promise`* -*Defined in [orderbook/src/orderbook.ts:90](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/orderbook/src/orderbook.ts#L90)* +*Defined in [orderbook/src/orderbook.ts:90](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/orderbook.ts#L90)* Returns all of the Available Asset Pairs for the provided Order Provider. @@ -1073,7 +992,7 @@ ___ ▸ **getOrdersAsync**(`makerAssetData`: string, `takerAssetData`: string): *`Promise`* -*Defined in [orderbook/src/orderbook.ts:75](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/orderbook/src/orderbook.ts#L75)* +*Defined in [orderbook/src/orderbook.ts:75](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/orderbook.ts#L75)* Returns all orders where the order.makerAssetData == makerAssetData and order.takerAssetData == takerAssetData. This pair is then subscribed to @@ -1096,7 +1015,7 @@ ___ ▸ **getOrderbookForMeshProvider**(`opts`: [MeshOrderProviderOpts](#interface-meshorderprovideropts)): *[Orderbook](#class-orderbook)* -*Defined in [orderbook/src/orderbook.ts:52](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/orderbook/src/orderbook.ts#L52)* +*Defined in [orderbook/src/orderbook.ts:52](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/orderbook.ts#L52)* Creates an Orderbook with a Mesh Order Provider. This Provider fetches ALL orders and subscribes to updates on ALL orders. @@ -1115,7 +1034,7 @@ ___ ▸ **getOrderbookForPollingProvider**(`opts`: [SRAPollingOrderProviderOpts](#interface-srapollingorderprovideropts)): *[Orderbook](#class-orderbook)* -*Defined in [orderbook/src/orderbook.ts:43](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/orderbook/src/orderbook.ts#L43)* +*Defined in [orderbook/src/orderbook.ts:43](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/orderbook.ts#L43)* Creates an Orderbook with SRA Polling Provider. This Provider simply polls every interval. @@ -1133,7 +1052,7 @@ ___ ▸ **getOrderbookForProvidedOrders**(`orders`: `SignedOrder`[]): *[Orderbook](#class-orderbook)* -*Defined in [orderbook/src/orderbook.ts:26](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/orderbook/src/orderbook.ts#L26)* +*Defined in [orderbook/src/orderbook.ts:26](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/orderbook.ts#L26)* Creates an Orderbook with the provided orders. This provider simply stores the orders and allows querying. No validation or subscriptions occur. @@ -1152,7 +1071,7 @@ ___ ▸ **getOrderbookForWebsocketProvider**(`opts`: [SRAWebsocketOrderProviderOpts](#interface-srawebsocketorderprovideropts)): *[Orderbook](#class-orderbook)* -*Defined in [orderbook/src/orderbook.ts:35](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/orderbook/src/orderbook.ts#L35)* +*Defined in [orderbook/src/orderbook.ts:35](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/orderbook.ts#L35)* Creates an Orderbook with the SRA Websocket Provider. This Provider fetches orders via the SRA http endpoint and then subscribes to the asset pair for future updates. @@ -1178,7 +1097,7 @@ Represents the varying smart contracts that can consume a valid swap quote • **Forwarder**: = "FORWARDER" -*Defined in [asset-swapper/src/types.ts:104](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L104)* +*Defined in [asset-swapper/src/types.ts:106](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L106)* ___ @@ -1186,7 +1105,7 @@ ___ • **None**: = "NONE" -*Defined in [asset-swapper/src/types.ts:105](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L105)* +*Defined in [asset-swapper/src/types.ts:107](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L107)*
@@ -1207,7 +1126,7 @@ Possible error messages thrown by an SwapQuoter instance or associated static me • **AssetUnavailable**: = "ASSET_UNAVAILABLE" -*Defined in [asset-swapper/src/types.ts:291](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L291)* +*Defined in [asset-swapper/src/types.ts:298](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L298)* ___ @@ -1215,7 +1134,7 @@ ___ • **InsufficientAssetLiquidity**: = "INSUFFICIENT_ASSET_LIQUIDITY" -*Defined in [asset-swapper/src/types.ts:290](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L290)* +*Defined in [asset-swapper/src/types.ts:297](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L297)* ___ @@ -1223,7 +1142,7 @@ ___ • **NoEtherTokenContractFound**: = "NO_ETHER_TOKEN_CONTRACT_FOUND" -*Defined in [asset-swapper/src/types.ts:288](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L288)* +*Defined in [asset-swapper/src/types.ts:295](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L295)* ___ @@ -1231,7 +1150,7 @@ ___ • **NoGasPriceProvidedOrEstimated**: = "NO_GAS_PRICE_PROVIDED_OR_ESTIMATED" -*Defined in [asset-swapper/src/types.ts:292](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L292)* +*Defined in [asset-swapper/src/types.ts:299](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L299)* ___ @@ -1239,7 +1158,7 @@ ___ • **StandardRelayerApiError**: = "STANDARD_RELAYER_API_ERROR" -*Defined in [asset-swapper/src/types.ts:289](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L289)* +*Defined in [asset-swapper/src/types.ts:296](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L296)*
@@ -1274,6 +1193,8 @@ ___ + +
# Interface: CalldataInfo @@ -1290,7 +1211,7 @@ ethAmount: The eth amount in wei to send with the smart contract call. • **calldataHexString**: *string* -*Defined in [asset-swapper/src/types.ts:53](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L53)* +*Defined in [asset-swapper/src/types.ts:55](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L55)* ___ @@ -1298,7 +1219,7 @@ ___ • **ethAmount**: *`BigNumber`* -*Defined in [asset-swapper/src/types.ts:56](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L56)* +*Defined in [asset-swapper/src/types.ts:58](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L58)* ___ @@ -1306,7 +1227,7 @@ ___ • **methodAbi**: *`MethodAbi`* -*Defined in [asset-swapper/src/types.ts:54](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L54)* +*Defined in [asset-swapper/src/types.ts:56](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L56)* ___ @@ -1314,7 +1235,7 @@ ___ • **toAddress**: *string* -*Defined in [asset-swapper/src/types.ts:55](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L55)* +*Defined in [asset-swapper/src/types.ts:57](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L57)*
@@ -1322,30 +1243,7 @@ ___ -# Interface: ForwarderExtensionContractOpts -ethAmount: The amount of eth (in Wei) sent to the forwarder contract. -feePercentage: percentage (up to 5%) of the taker asset paid to feeRecipient -feeRecipient: address of the receiver of the feePercentage of taker asset - - -## Properties - -### feePercentage - -• **feePercentage**: *number* - -*Defined in [asset-swapper/src/types.ts:192](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L192)* - -___ - -### feeRecipient - -• **feeRecipient**: *string* - -*Defined in [asset-swapper/src/types.ts:193](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L193)* - -
@@ -1362,7 +1260,7 @@ ___ • **ethAmount**? : *`BigNumber`* -*Defined in [asset-swapper/src/types.ts:200](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L200)* +*Defined in [asset-swapper/src/types.ts:209](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L209)* ___ @@ -1370,7 +1268,7 @@ ___ • **takerAddress**? : *undefined | string* -*Defined in [asset-swapper/src/types.ts:199](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L199)* +*Defined in [asset-swapper/src/types.ts:208](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L208)*
@@ -1385,7 +1283,7 @@ Represents available liquidity for a given assetData. • **makerAssetAvailableInBaseUnits**: *`BigNumber`* -*Defined in [asset-swapper/src/types.ts:299](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L299)* +*Defined in [asset-swapper/src/types.ts:306](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L306)* ___ @@ -1393,7 +1291,7 @@ ___ • **takerAssetAvailableInBaseUnits**: *`BigNumber`* -*Defined in [asset-swapper/src/types.ts:300](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L300)* +*Defined in [asset-swapper/src/types.ts:307](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L307)*
@@ -1411,17 +1309,7 @@ type: Specified MarketOperation the SwapQuote is provided for *Inherited from [SwapQuoteBase](#interface-swapquotebase).[bestCaseQuoteInfo](#bestcasequoteinfo)* -*Defined in [asset-swapper/src/types.ts:216](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L216)* - -___ - -### gasPrice - -• **gasPrice**: *`BigNumber`* - -*Inherited from [SwapQuoteBase](#interface-swapquotebase).[gasPrice](#gasprice)* - -*Defined in [asset-swapper/src/types.ts:214](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L214)* +*Defined in [asset-swapper/src/types.ts:223](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L223)* ___ @@ -1431,7 +1319,7 @@ ___ *Inherited from [SwapQuoteBase](#interface-swapquotebase).[makerAssetData](#makerassetdata)* -*Defined in [asset-swapper/src/types.ts:213](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L213)* +*Defined in [asset-swapper/src/types.ts:221](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L221)* ___ @@ -1439,7 +1327,7 @@ ___ • **makerAssetFillAmount**: *`BigNumber`* -*Defined in [asset-swapper/src/types.ts:234](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L234)* +*Defined in [asset-swapper/src/types.ts:241](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L241)* ___ @@ -1449,7 +1337,7 @@ ___ *Inherited from [SwapQuoteBase](#interface-swapquotebase).[orders](#orders)* -*Defined in [asset-swapper/src/types.ts:215](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L215)* +*Defined in [asset-swapper/src/types.ts:222](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L222)* ___ @@ -1459,7 +1347,7 @@ ___ *Inherited from [SwapQuoteBase](#interface-swapquotebase).[takerAssetData](#takerassetdata)* -*Defined in [asset-swapper/src/types.ts:212](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L212)* +*Defined in [asset-swapper/src/types.ts:220](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L220)* ___ @@ -1467,7 +1355,7 @@ ___ • **type**: *[Buy](#buy)* -*Defined in [asset-swapper/src/types.ts:235](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L235)* +*Defined in [asset-swapper/src/types.ts:242](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L242)* ___ @@ -1477,7 +1365,7 @@ ___ *Inherited from [SwapQuoteBase](#interface-swapquotebase).[worstCaseQuoteInfo](#worstcasequoteinfo)* -*Defined in [asset-swapper/src/types.ts:217](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L217)* +*Defined in [asset-swapper/src/types.ts:224](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L224)*
@@ -1495,17 +1383,7 @@ type: Specified MarketOperation the SwapQuote is provided for *Inherited from [SwapQuoteBase](#interface-swapquotebase).[bestCaseQuoteInfo](#bestcasequoteinfo)* -*Defined in [asset-swapper/src/types.ts:216](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L216)* - -___ - -### gasPrice - -• **gasPrice**: *`BigNumber`* - -*Inherited from [SwapQuoteBase](#interface-swapquotebase).[gasPrice](#gasprice)* - -*Defined in [asset-swapper/src/types.ts:214](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L214)* +*Defined in [asset-swapper/src/types.ts:223](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L223)* ___ @@ -1515,7 +1393,7 @@ ___ *Inherited from [SwapQuoteBase](#interface-swapquotebase).[makerAssetData](#makerassetdata)* -*Defined in [asset-swapper/src/types.ts:213](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L213)* +*Defined in [asset-swapper/src/types.ts:221](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L221)* ___ @@ -1525,7 +1403,7 @@ ___ *Inherited from [SwapQuoteBase](#interface-swapquotebase).[orders](#orders)* -*Defined in [asset-swapper/src/types.ts:215](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L215)* +*Defined in [asset-swapper/src/types.ts:222](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L222)* ___ @@ -1535,7 +1413,7 @@ ___ *Inherited from [SwapQuoteBase](#interface-swapquotebase).[takerAssetData](#takerassetdata)* -*Defined in [asset-swapper/src/types.ts:212](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L212)* +*Defined in [asset-swapper/src/types.ts:220](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L220)* ___ @@ -1543,7 +1421,7 @@ ___ • **takerAssetFillAmount**: *`BigNumber`* -*Defined in [asset-swapper/src/types.ts:225](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L225)* +*Defined in [asset-swapper/src/types.ts:232](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L232)* ___ @@ -1551,7 +1429,7 @@ ___ • **type**: *[Sell](#sell)* -*Defined in [asset-swapper/src/types.ts:226](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L226)* +*Defined in [asset-swapper/src/types.ts:233](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L233)* ___ @@ -1561,7 +1439,7 @@ ___ *Inherited from [SwapQuoteBase](#interface-swapquotebase).[worstCaseQuoteInfo](#worstcasequoteinfo)* -*Defined in [asset-swapper/src/types.ts:217](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L217)* +*Defined in [asset-swapper/src/types.ts:224](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L224)*
@@ -1624,7 +1502,7 @@ ___ • **fillableMakerAssetAmount**: *`BigNumber`* -*Defined in [asset-swapper/src/types.ts:40](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L40)* +*Defined in [asset-swapper/src/types.ts:42](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L42)* ___ @@ -1632,7 +1510,7 @@ ___ • **fillableTakerAssetAmount**: *`BigNumber`* -*Defined in [asset-swapper/src/types.ts:41](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L41)* +*Defined in [asset-swapper/src/types.ts:43](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L43)* ___ @@ -1640,7 +1518,7 @@ ___ • **fillableTakerFeeAmount**: *`BigNumber`* -*Defined in [asset-swapper/src/types.ts:42](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L42)* +*Defined in [asset-swapper/src/types.ts:44](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L44)* ___ @@ -1795,7 +1673,7 @@ methodAbi: The ABI of the smart contract method to call with params. • **ethAmount**: *`BigNumber`* -*Defined in [asset-swapper/src/types.ts:69](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L69)* +*Defined in [asset-swapper/src/types.ts:71](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L71)* ___ @@ -1803,7 +1681,7 @@ ___ • **methodAbi**: *`MethodAbi`* -*Defined in [asset-swapper/src/types.ts:70](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L70)* +*Defined in [asset-swapper/src/types.ts:72](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L72)* ___ @@ -1811,7 +1689,7 @@ ___ • **params**: *`T`* -*Defined in [asset-swapper/src/types.ts:67](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L67)* +*Defined in [asset-swapper/src/types.ts:69](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L69)* ___ @@ -1819,7 +1697,7 @@ ___ • **toAddress**: *string* -*Defined in [asset-swapper/src/types.ts:68](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L68)* +*Defined in [asset-swapper/src/types.ts:70](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L70)*
@@ -1848,7 +1726,7 @@ executeSwapQuoteOrThrowAsync: Executes a web3 transaction to swap for tokens wit ▸ **executeSwapQuoteOrThrowAsync**(`quote`: [SwapQuote](#swapquote), `opts`: `Partial`): *`Promise`* -*Defined in [asset-swapper/src/types.ts:157](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L157)* +*Defined in [asset-swapper/src/types.ts:159](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L159)* **Parameters:** @@ -1865,7 +1743,7 @@ ___ ▸ **getCalldataOrThrowAsync**(`quote`: [SwapQuote](#swapquote), `opts`: `Partial`): *`Promise`* -*Defined in [asset-swapper/src/types.ts:152](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L152)* +*Defined in [asset-swapper/src/types.ts:154](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L154)* **Parameters:** @@ -1882,7 +1760,7 @@ ___ ▸ **getSmartContractParamsOrThrowAsync**(`quote`: [SwapQuote](#swapquote), `opts`: `Partial`): *`Promise>`* -*Defined in [asset-swapper/src/types.ts:153](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L153)* +*Defined in [asset-swapper/src/types.ts:155](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L155)* **Parameters:** @@ -1906,15 +1784,29 @@ chainId: The chainId that the desired orders should be for. • **chainId**: *number* -*Defined in [asset-swapper/src/types.ts:164](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L164)* +*Defined in [asset-swapper/src/types.ts:166](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L166)* + +
+ +# Interface: SwapQuoteConsumingOpts + + +## Properties + +### useExtensionContract + +• **useExtensionContract**: *[ExtensionContractType](#enumeration-extensioncontracttype)* + +*Defined in [asset-swapper/src/types.ts:202](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L202)*
# Interface: SwapQuoteExecutionOpts -ethAmount: The amount of eth sent with the execution of a swap. takerAddress: The address to perform the buy. Defaults to the first available address from the provider. gasLimit: The amount of gas to send with a transaction (in Gwei). Defaults to an eth_estimateGas rpc call. +gasPrice: Gas price in Wei to use for a transaction +ethAmount: The amount of eth sent with the execution of a swap ## Properties @@ -1923,17 +1815,7 @@ gasLimit: The amount of gas to send with a transaction (in Gwei). Defaults to an • **ethAmount**? : *`BigNumber`* -*Defined in [asset-swapper/src/types.ts:181](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L181)* - -___ - -### `Optional` extensionContractOpts - -• **extensionContractOpts**? : *[ForwarderExtensionContractOpts](#class-forwarderextensioncontractopts) | any* - -*Inherited from [SwapQuoteGetOutputOpts](#interface-swapquotegetoutputopts).[extensionContractOpts](#optional-extensioncontractopts)* - -*Defined in [asset-swapper/src/types.ts:172](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L172)* +*Defined in [asset-swapper/src/types.ts:184](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L184)* ___ @@ -1941,7 +1823,15 @@ ___ • **gasLimit**? : *undefined | number* -*Defined in [asset-swapper/src/types.ts:183](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L183)* +*Defined in [asset-swapper/src/types.ts:182](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L182)* + +___ + +### `Optional` gasPrice + +• **gasPrice**? : *`BigNumber`* + +*Defined in [asset-swapper/src/types.ts:183](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L183)* ___ @@ -1949,17 +1839,7 @@ ___ • **takerAddress**? : *undefined | string* -*Defined in [asset-swapper/src/types.ts:182](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L182)* - -___ - -### useExtensionContract - -• **useExtensionContract**: *[ExtensionContractType](#enumeration-extensioncontracttype)* - -*Inherited from [SwapQuoteGetOutputOpts](#interface-swapquotegetoutputopts).[useExtensionContract](#useextensioncontract)* - -*Defined in [asset-swapper/src/types.ts:171](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L171)* +*Defined in [asset-swapper/src/types.ts:181](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L181)*
@@ -1968,40 +1848,18 @@ ___ Represents the options provided to a generic SwapQuoteConsumer -## Properties +## Hierarchy -### `Optional` extensionContractOpts - -• **extensionContractOpts**? : *[ForwarderExtensionContractOpts](#class-forwarderextensioncontractopts) | any* - -*Defined in [asset-swapper/src/types.ts:172](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L172)* - -___ - -### useExtensionContract - -• **useExtensionContract**: *[ExtensionContractType](#enumeration-extensioncontracttype)* - -*Defined in [asset-swapper/src/types.ts:171](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L171)* - -
- -# Interface: SwapQuoteInfo - -feeTakerAssetAmount: The amount of takerAsset reserved for paying takerFees when swapping for desired assets. -takerAssetAmount: The amount of takerAsset swapped for desired makerAsset. -totalTakerAssetAmount: The total amount of takerAsset required to complete the swap (filling orders, and paying takerFees). -makerAssetAmount: The amount of makerAsset that will be acquired through the swap. -protocolFeeInWeiAmount: The amount of ETH to pay (in WEI) as protocol fee to perform the swap for desired asset. +* **SwapQuoteInfo** -## Properties +## Properties ### feeTakerAssetAmount • **feeTakerAssetAmount**: *`BigNumber`* -*Defined in [asset-swapper/src/types.ts:246](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L246)* +*Defined in [asset-swapper/src/types.ts:253](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L253)* ___ @@ -2009,15 +1867,15 @@ ___ • **makerAssetAmount**: *`BigNumber`* -*Defined in [asset-swapper/src/types.ts:249](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L249)* +*Defined in [asset-swapper/src/types.ts:256](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L256)* ___ -### protocolFeeInWeiAmount +### protocolFeeInEthAmount -• **protocolFeeInWeiAmount**: *`BigNumber`* +• **protocolFeeInEthAmount**: *`BigNumber`* -*Defined in [asset-swapper/src/types.ts:250](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L250)* +*Defined in [asset-swapper/src/types.ts:257](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L257)* ___ @@ -2025,7 +1883,7 @@ ___ • **takerAssetAmount**: *`BigNumber`* -*Defined in [asset-swapper/src/types.ts:247](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L247)* +*Defined in [asset-swapper/src/types.ts:254](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L254)* ___ @@ -2033,7 +1891,7 @@ ___ • **totalTakerAssetAmount**: *`BigNumber`* -*Defined in [asset-swapper/src/types.ts:248](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L248)* +*Defined in [asset-swapper/src/types.ts:255](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L255)*
@@ -2049,7 +1907,7 @@ gasPrice: gas price to determine protocolFee amount, default to ethGasStation fa • **gasPrice**? : *`BigNumber`* -*Defined in [asset-swapper/src/types.ts:259](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L259)* +*Defined in [asset-swapper/src/types.ts:266](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L266)* ___ @@ -2057,7 +1915,7 @@ ___ • **slippagePercentage**: *number* -*Defined in [asset-swapper/src/types.ts:258](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L258)* +*Defined in [asset-swapper/src/types.ts:265](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L265)*
@@ -2074,7 +1932,7 @@ expiryBufferMs: The number of seconds to add when calculating whether an order i • **chainId**: *number* -*Defined in [asset-swapper/src/types.ts:268](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L268)* +*Defined in [asset-swapper/src/types.ts:275](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L275)* ___ @@ -2084,7 +1942,7 @@ ___ *Overrides [OrderPrunerOpts](_asset_swapper_src_types_.orderpruneropts.md).[expiryBufferMs](#expirybufferms)* -*Defined in [asset-swapper/src/types.ts:270](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L270)* +*Defined in [asset-swapper/src/types.ts:277](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L277)* ___ @@ -2092,7 +1950,7 @@ ___ • **orderRefreshIntervalMs**: *number* -*Defined in [asset-swapper/src/types.ts:269](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L269)* +*Defined in [asset-swapper/src/types.ts:276](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L276)* ___ @@ -2102,7 +1960,7 @@ ___ *Inherited from [OrderPrunerOpts](#interface-orderpruneropts).[permittedOrderFeeTypes](#permittedorderfeetypes)* -*Defined in [asset-swapper/src/types.ts:11](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L11)* +*Defined in [asset-swapper/src/types.ts:11](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L11)*
@@ -2143,15 +2001,7 @@ ___ • **components**? : *[DataItem](#class-dataitem)[]* -*Defined in [ethereum-types/src/index.ts:138](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/ethereum-types/src/index.ts#L138)* - -___ - -### `Optional` internalType - -• **internalType**? : *undefined | string* - -*Defined in [ethereum-types/src/index.ts:137](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/ethereum-types/src/index.ts#L137)* +*Defined in [ethereum-types/src/index.ts:137](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/ethereum-types/src/index.ts#L137)* ___ @@ -2159,7 +2009,7 @@ ___ • **name**: *string* -*Defined in [ethereum-types/src/index.ts:135](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/ethereum-types/src/index.ts#L135)* +*Defined in [ethereum-types/src/index.ts:135](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/ethereum-types/src/index.ts#L135)* ___ @@ -2167,7 +2017,7 @@ ___ • **type**: *string* -*Defined in [ethereum-types/src/index.ts:136](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/ethereum-types/src/index.ts#L136)* +*Defined in [ethereum-types/src/index.ts:136](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/ethereum-types/src/index.ts#L136)*
@@ -2186,7 +2036,7 @@ ___ • **isEIP1193**: *boolean* -*Defined in [ethereum-types/src/index.ts:73](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/ethereum-types/src/index.ts#L73)* +*Defined in [ethereum-types/src/index.ts:73](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/ethereum-types/src/index.ts#L73)* ## Methods @@ -2194,7 +2044,7 @@ ___ ▸ **on**(`event`: [EIP1193Event](#eip1193event), `listener`: function): *this* -*Defined in [ethereum-types/src/index.ts:75](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/ethereum-types/src/index.ts#L75)* +*Defined in [ethereum-types/src/index.ts:75](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/ethereum-types/src/index.ts#L75)* **Parameters:** @@ -2218,7 +2068,7 @@ ___ ▸ **send**(`method`: string, `params?`: any[]): *`Promise`* -*Defined in [ethereum-types/src/index.ts:74](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/ethereum-types/src/index.ts#L74)* +*Defined in [ethereum-types/src/index.ts:74](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/ethereum-types/src/index.ts#L74)* **Parameters:** @@ -2252,7 +2102,7 @@ Name | Type | ▸ **sendAsync**(`payload`: [JSONRPCRequestPayload](_ethereum_types_src_index_.jsonrpcrequestpayload.md), `callback`: [JSONRPCErrorCallback](#jsonrpcerrorcallback)): *void* -*Defined in [ethereum-types/src/index.ts:14](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/ethereum-types/src/index.ts#L14)* +*Defined in [ethereum-types/src/index.ts:14](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/ethereum-types/src/index.ts#L14)* **Parameters:** @@ -2276,7 +2126,7 @@ Name | Type | • **id**: *number* -*Defined in [ethereum-types/src/index.ts:331](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/ethereum-types/src/index.ts#L331)* +*Defined in [ethereum-types/src/index.ts:330](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/ethereum-types/src/index.ts#L330)* ___ @@ -2284,7 +2134,7 @@ ___ • **jsonrpc**: *string* -*Defined in [ethereum-types/src/index.ts:332](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/ethereum-types/src/index.ts#L332)* +*Defined in [ethereum-types/src/index.ts:331](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/ethereum-types/src/index.ts#L331)* ___ @@ -2292,7 +2142,7 @@ ___ • **method**: *string* -*Defined in [ethereum-types/src/index.ts:330](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/ethereum-types/src/index.ts#L330)* +*Defined in [ethereum-types/src/index.ts:329](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/ethereum-types/src/index.ts#L329)* ___ @@ -2300,7 +2150,7 @@ ___ • **params**: *any[]* -*Defined in [ethereum-types/src/index.ts:329](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/ethereum-types/src/index.ts#L329)* +*Defined in [ethereum-types/src/index.ts:328](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/ethereum-types/src/index.ts#L328)*
@@ -2313,7 +2163,7 @@ ___ • **code**: *number* -*Defined in [ethereum-types/src/index.ts:337](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/ethereum-types/src/index.ts#L337)* +*Defined in [ethereum-types/src/index.ts:336](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/ethereum-types/src/index.ts#L336)* ___ @@ -2321,7 +2171,7 @@ ___ • **message**: *string* -*Defined in [ethereum-types/src/index.ts:336](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/ethereum-types/src/index.ts#L336)* +*Defined in [ethereum-types/src/index.ts:335](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/ethereum-types/src/index.ts#L335)*
@@ -2334,7 +2184,7 @@ ___ • **error**? : *[JSONRPCResponseError](#class-jsonrpcresponseerror)* -*Defined in [ethereum-types/src/index.ts:344](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/ethereum-types/src/index.ts#L344)* +*Defined in [ethereum-types/src/index.ts:343](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/ethereum-types/src/index.ts#L343)* ___ @@ -2342,7 +2192,7 @@ ___ • **id**: *number* -*Defined in [ethereum-types/src/index.ts:342](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/ethereum-types/src/index.ts#L342)* +*Defined in [ethereum-types/src/index.ts:341](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/ethereum-types/src/index.ts#L341)* ___ @@ -2350,7 +2200,7 @@ ___ • **jsonrpc**: *string* -*Defined in [ethereum-types/src/index.ts:343](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/ethereum-types/src/index.ts#L343)* +*Defined in [ethereum-types/src/index.ts:342](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/ethereum-types/src/index.ts#L342)* ___ @@ -2358,7 +2208,7 @@ ___ • **result**: *any* -*Defined in [ethereum-types/src/index.ts:341](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/ethereum-types/src/index.ts#L341)* +*Defined in [ethereum-types/src/index.ts:340](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/ethereum-types/src/index.ts#L340)*
@@ -2377,7 +2227,7 @@ ___ • **constant**: *boolean* -*Defined in [ethereum-types/src/index.ts:94](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/ethereum-types/src/index.ts#L94)* +*Defined in [ethereum-types/src/index.ts:94](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/ethereum-types/src/index.ts#L94)* ___ @@ -2385,7 +2235,7 @@ ___ • **inputs**: *[DataItem](#class-dataitem)[]* -*Defined in [ethereum-types/src/index.ts:92](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/ethereum-types/src/index.ts#L92)* +*Defined in [ethereum-types/src/index.ts:92](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/ethereum-types/src/index.ts#L92)* ___ @@ -2393,7 +2243,7 @@ ___ • **name**: *string* -*Defined in [ethereum-types/src/index.ts:91](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/ethereum-types/src/index.ts#L91)* +*Defined in [ethereum-types/src/index.ts:91](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/ethereum-types/src/index.ts#L91)* ___ @@ -2401,7 +2251,7 @@ ___ • **outputs**: *[DataItem](#class-dataitem)[]* -*Defined in [ethereum-types/src/index.ts:93](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/ethereum-types/src/index.ts#L93)* +*Defined in [ethereum-types/src/index.ts:93](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/ethereum-types/src/index.ts#L93)* ___ @@ -2409,7 +2259,7 @@ ___ • **payable**: *boolean* -*Defined in [ethereum-types/src/index.ts:96](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/ethereum-types/src/index.ts#L96)* +*Defined in [ethereum-types/src/index.ts:96](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/ethereum-types/src/index.ts#L96)* ___ @@ -2417,7 +2267,7 @@ ___ • **stateMutability**: *[StateMutability](#statemutability)* -*Defined in [ethereum-types/src/index.ts:95](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/ethereum-types/src/index.ts#L95)* +*Defined in [ethereum-types/src/index.ts:95](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/ethereum-types/src/index.ts#L95)* ___ @@ -2425,7 +2275,7 @@ ___ • **type**: *string* -*Defined in [ethereum-types/src/index.ts:90](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/ethereum-types/src/index.ts#L90)* +*Defined in [ethereum-types/src/index.ts:90](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/ethereum-types/src/index.ts#L90)*
@@ -2470,17 +2320,7 @@ ___ *Overrides [DataItem](_ethereum_types_src_index_.dataitem.md).[components](#optional-components)* -*Defined in [ethereum-types/src/index.ts:142](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/ethereum-types/src/index.ts#L142)* - -___ - -### `Optional` internalType - -• **internalType**? : *undefined | string* - -*Inherited from [DataItem](#interface-dataitem).[internalType](#optional-internaltype)* - -*Defined in [ethereum-types/src/index.ts:137](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/ethereum-types/src/index.ts#L137)* +*Defined in [ethereum-types/src/index.ts:141](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/ethereum-types/src/index.ts#L141)* ___ @@ -2490,7 +2330,7 @@ ___ *Inherited from [DataItem](#interface-dataitem).[name](#name)* -*Defined in [ethereum-types/src/index.ts:135](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/ethereum-types/src/index.ts#L135)* +*Defined in [ethereum-types/src/index.ts:135](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/ethereum-types/src/index.ts#L135)* ___ @@ -2500,7 +2340,7 @@ ___ *Inherited from [DataItem](#interface-dataitem).[type](#type)* -*Defined in [ethereum-types/src/index.ts:136](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/ethereum-types/src/index.ts#L136)* +*Defined in [ethereum-types/src/index.ts:136](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/ethereum-types/src/index.ts#L136)*
@@ -2508,45 +2348,76 @@ ___ -# Interface: Web3JsV1Provider +# Class: InsufficientAssetLiquidityError -Web3.js version 1 provider interface -This provider interface was implemented in the pre-1.0Beta releases for Web3.js. -This interface allowed sending synchonous requests, support for which was later dropped. +Error class representing insufficient asset liquidity -## Methods +## Constructors -### send -▸ **send**(`payload`: [JSONRPCRequestPayload](_ethereum_types_src_index_.jsonrpcrequestpayload.md)): *[JSONRPCResponsePayload](#class-jsonrpcresponsepayload)* -*Defined in [ethereum-types/src/index.ts:45](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/ethereum-types/src/index.ts#L45)* +\+ **new InsufficientAssetLiquidityError**(`amountAvailableToFill`: `BigNumber`): *[InsufficientAssetLiquidityError](#class-insufficientassetliquidityerror)* + +*Defined in [asset-swapper/src/errors.ts:12](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/errors.ts#L12)* **Parameters:** -Name | Type | ------- | ------ | -`payload` | [JSONRPCRequestPayload](#class-jsonrpcrequestpayload) | +Name | Type | Description | +------ | ------ | ------ | +`amountAvailableToFill` | `BigNumber` | The amount availabe to fill (in base units) factoring in slippage | -**Returns:** *[JSONRPCResponsePayload](#class-jsonrpcresponsepayload)* +**Returns:** *[InsufficientAssetLiquidityError](#class-insufficientassetliquidityerror)* + +## Properties + +### amountAvailableToFill + +• **amountAvailableToFill**: *`BigNumber`* + +*Defined in [asset-swapper/src/errors.ts:12](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/errors.ts#L12)* + +The amount availabe to fill (in base units) factoring in slippage. ___ -### sendAsync +### message -▸ **sendAsync**(`payload`: [JSONRPCRequestPayload](_ethereum_types_src_index_.jsonrpcrequestpayload.md), `callback`: [JSONRPCErrorCallback](#jsonrpcerrorcallback)): *void* +• **message**: *string* -*Defined in [ethereum-types/src/index.ts:44](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/ethereum-types/src/index.ts#L44)* -**Parameters:** -Name | Type | ------- | ------ | -`payload` | [JSONRPCRequestPayload](#class-jsonrpcrequestpayload) | -`callback` | [JSONRPCErrorCallback](#jsonrpcerrorcallback) | -**Returns:** *void* + +___ + +### name + +• **name**: *string* + + + + + +___ + +### `Optional` stack + +• **stack**? : *undefined | string* + + + +*Overrides void* + + + +___ + +### `Static` Error + +▪ **Error**: *`ErrorConstructor`* + +
@@ -2563,7 +2434,7 @@ before the first attempts to conform to EIP1193 ▸ **send**(`payload`: [JSONRPCRequestPayload](_ethereum_types_src_index_.jsonrpcrequestpayload.md), `callback`: [JSONRPCErrorCallback](#jsonrpcerrorcallback)): *void* -*Defined in [ethereum-types/src/index.ts:54](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/ethereum-types/src/index.ts#L54)* +*Defined in [ethereum-types/src/index.ts:54](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/ethereum-types/src/index.ts#L54)* **Parameters:** @@ -2589,7 +2460,7 @@ however it does not conform entirely. ▸ **send**(`method`: string, `params?`: any[]): *`Promise`* -*Defined in [ethereum-types/src/index.ts:63](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/ethereum-types/src/index.ts#L63)* +*Defined in [ethereum-types/src/index.ts:63](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/ethereum-types/src/index.ts#L63)* **Parameters:** @@ -2615,7 +2486,7 @@ add here • **isMetaMask**? : *undefined | false | true* -*Defined in [ethereum-types/src/index.ts:31](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/ethereum-types/src/index.ts#L31)* +*Defined in [ethereum-types/src/index.ts:31](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/ethereum-types/src/index.ts#L31)* ___ @@ -2623,7 +2494,7 @@ ___ • **isParity**? : *undefined | false | true* -*Defined in [ethereum-types/src/index.ts:32](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/ethereum-types/src/index.ts#L32)* +*Defined in [ethereum-types/src/index.ts:32](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/ethereum-types/src/index.ts#L32)* ___ @@ -2631,7 +2502,7 @@ ___ • **isZeroExProvider**? : *undefined | false | true* -*Defined in [ethereum-types/src/index.ts:30](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/ethereum-types/src/index.ts#L30)* +*Defined in [ethereum-types/src/index.ts:30](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/ethereum-types/src/index.ts#L30)* ## Methods @@ -2639,7 +2510,7 @@ ___ ▸ **enable**(): *`Promise`* -*Defined in [ethereum-types/src/index.ts:34](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/ethereum-types/src/index.ts#L34)* +*Defined in [ethereum-types/src/index.ts:34](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/ethereum-types/src/index.ts#L34)* **Returns:** *`Promise`* @@ -2649,7 +2520,7 @@ ___ ▸ **sendAsync**(`payload`: [JSONRPCRequestPayload](_ethereum_types_src_index_.jsonrpcrequestpayload.md), `callback`: [JSONRPCErrorCallback](#jsonrpcerrorcallback)): *void* -*Defined in [ethereum-types/src/index.ts:35](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/ethereum-types/src/index.ts#L35)* +*Defined in [ethereum-types/src/index.ts:35](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/ethereum-types/src/index.ts#L35)* **Parameters:** @@ -2666,7 +2537,7 @@ ___ ▸ **stop**(): *void* -*Defined in [ethereum-types/src/index.ts:33](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/ethereum-types/src/index.ts#L33)* +*Defined in [ethereum-types/src/index.ts:33](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/ethereum-types/src/index.ts#L33)* **Returns:** *void* @@ -2681,7 +2552,7 @@ ___ • **accepted**: *`SignedOrder`[]* -*Defined in [orderbook/src/types.ts:15](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/orderbook/src/types.ts#L15)* +*Defined in [orderbook/src/types.ts:15](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/types.ts#L15)* ___ @@ -2689,7 +2560,7 @@ ___ • **rejected**: *[RejectedOrder](#class-rejectedorder)[]* -*Defined in [orderbook/src/types.ts:16](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/orderbook/src/types.ts#L16)* +*Defined in [orderbook/src/types.ts:16](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/types.ts#L16)*
@@ -2702,7 +2573,7 @@ ___ • **added**: *`APIOrder`[]* -*Defined in [orderbook/src/types.ts:6](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/orderbook/src/types.ts#L6)* +*Defined in [orderbook/src/types.ts:6](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/types.ts#L6)* ___ @@ -2710,7 +2581,7 @@ ___ • **assetPairKey**: *string* -*Defined in [orderbook/src/types.ts:5](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/orderbook/src/types.ts#L5)* +*Defined in [orderbook/src/types.ts:5](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/types.ts#L5)* ___ @@ -2718,7 +2589,7 @@ ___ • **removed**: *`APIOrder`[]* -*Defined in [orderbook/src/types.ts:7](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/orderbook/src/types.ts#L7)* +*Defined in [orderbook/src/types.ts:7](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/types.ts#L7)*
@@ -2733,7 +2604,7 @@ Constructor options for a Mesh Order Provider • **websocketEndpoint**: *string* -*Defined in [orderbook/src/types.ts:50](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/orderbook/src/types.ts#L50)* +*Defined in [orderbook/src/types.ts:52](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/types.ts#L52)* ___ @@ -2741,7 +2612,7 @@ ___ • **wsOpts**? : *`WSOpts`* -*Defined in [orderbook/src/types.ts:52](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/orderbook/src/types.ts#L52)* +*Defined in [orderbook/src/types.ts:54](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/types.ts#L54)*
@@ -2754,7 +2625,7 @@ ___ • **message**: *string* -*Defined in [orderbook/src/types.ts:11](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/orderbook/src/types.ts#L11)* +*Defined in [orderbook/src/types.ts:11](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/types.ts#L11)* ___ @@ -2762,7 +2633,7 @@ ___ • **order**: *`SignedOrder`* -*Defined in [orderbook/src/types.ts:12](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/orderbook/src/types.ts#L12)* +*Defined in [orderbook/src/types.ts:12](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/types.ts#L12)*
@@ -2777,7 +2648,7 @@ Constructor options for a SRA Polling Order Provider • **chainId**? : *undefined | number* -*Defined in [orderbook/src/types.ts:42](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/orderbook/src/types.ts#L42)* +*Defined in [orderbook/src/types.ts:44](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/types.ts#L44)* ___ @@ -2785,7 +2656,7 @@ ___ • **httpEndpoint**: *string* -*Defined in [orderbook/src/types.ts:36](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/orderbook/src/types.ts#L36)* +*Defined in [orderbook/src/types.ts:38](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/types.ts#L38)* ___ @@ -2793,7 +2664,7 @@ ___ • **perPage**? : *undefined | number* -*Defined in [orderbook/src/types.ts:40](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/orderbook/src/types.ts#L40)* +*Defined in [orderbook/src/types.ts:42](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/types.ts#L42)* ___ @@ -2801,7 +2672,7 @@ ___ • **pollingIntervalMs**: *number* -*Defined in [orderbook/src/types.ts:38](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/orderbook/src/types.ts#L38)* +*Defined in [orderbook/src/types.ts:40](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/types.ts#L40)*
@@ -2812,11 +2683,19 @@ Constructor options for a SRA Websocket Order Provider ## Properties +### `Optional` chainId + +• **chainId**? : *undefined | number* + +*Defined in [orderbook/src/types.ts:30](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/types.ts#L30)* + +___ + ### httpEndpoint • **httpEndpoint**: *string* -*Defined in [orderbook/src/types.ts:26](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/orderbook/src/types.ts#L26)* +*Defined in [orderbook/src/types.ts:26](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/types.ts#L26)* ___ @@ -2824,7 +2703,7 @@ ___ • **websocketEndpoint**: *string* -*Defined in [orderbook/src/types.ts:28](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/orderbook/src/types.ts#L28)* +*Defined in [orderbook/src/types.ts:28](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/types.ts#L28)*
@@ -2837,7 +2716,7 @@ ___ • **metaData**: *object* -*Defined in [types/src/index.ts:408](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/types/src/index.ts#L408)* +*Defined in [types/src/index.ts:403](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/types/src/index.ts#L403)* ___ @@ -2845,7 +2724,7 @@ ___ • **order**: *[SignedOrder](#class-signedorder)* -*Defined in [types/src/index.ts:407](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/types/src/index.ts#L407)* +*Defined in [types/src/index.ts:402](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/types/src/index.ts#L402)*
@@ -2860,7 +2739,7 @@ ___ • **assetData**: *string* -*Defined in [types/src/index.ts:424](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/types/src/index.ts#L424)* +*Defined in [types/src/index.ts:419](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/types/src/index.ts#L419)* ___ @@ -2868,7 +2747,7 @@ ___ • **maxAmount**: *`BigNumber`* -*Defined in [types/src/index.ts:426](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/types/src/index.ts#L426)* +*Defined in [types/src/index.ts:421](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/types/src/index.ts#L421)* ___ @@ -2876,7 +2755,7 @@ ___ • **minAmount**: *`BigNumber`* -*Defined in [types/src/index.ts:425](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/types/src/index.ts#L425)* +*Defined in [types/src/index.ts:420](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/types/src/index.ts#L420)* ___ @@ -2884,7 +2763,7 @@ ___ • **precision**: *number* -*Defined in [types/src/index.ts:427](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/types/src/index.ts#L427)* +*Defined in [types/src/index.ts:422](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/types/src/index.ts#L422)*
@@ -2897,7 +2776,7 @@ ___ • **assetDataA**: *[Asset](#class-asset)* -*Defined in [types/src/index.ts:419](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/types/src/index.ts#L419)* +*Defined in [types/src/index.ts:414](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/types/src/index.ts#L414)* ___ @@ -2905,7 +2784,7 @@ ___ • **assetDataB**: *[Asset](#class-asset)* -*Defined in [types/src/index.ts:420](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/types/src/index.ts#L420)* +*Defined in [types/src/index.ts:415](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/types/src/index.ts#L415)*
@@ -2951,6 +2830,8 @@ ___ + + @@ -3000,6 +2881,8 @@ ___ + + @@ -3014,7 +2897,7 @@ ___ *Inherited from [Order](#interface-order).[chainId](#chainid)* -*Defined in [types/src/index.ts:14](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/types/src/index.ts#L14)* +*Defined in [types/src/index.ts:14](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/types/src/index.ts#L14)* ___ @@ -3024,7 +2907,7 @@ ___ *Inherited from [Order](#interface-order).[exchangeAddress](#exchangeaddress)* -*Defined in [types/src/index.ts:15](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/types/src/index.ts#L15)* +*Defined in [types/src/index.ts:15](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/types/src/index.ts#L15)* ___ @@ -3034,7 +2917,7 @@ ___ *Inherited from [Order](#interface-order).[expirationTimeSeconds](#expirationtimeseconds)* -*Defined in [types/src/index.ts:24](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/types/src/index.ts#L24)* +*Defined in [types/src/index.ts:24](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/types/src/index.ts#L24)* ___ @@ -3044,7 +2927,7 @@ ___ *Inherited from [Order](#interface-order).[feeRecipientAddress](#feerecipientaddress)* -*Defined in [types/src/index.ts:18](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/types/src/index.ts#L18)* +*Defined in [types/src/index.ts:18](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/types/src/index.ts#L18)* ___ @@ -3054,7 +2937,7 @@ ___ *Inherited from [Order](#interface-order).[makerAddress](#makeraddress)* -*Defined in [types/src/index.ts:16](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/types/src/index.ts#L16)* +*Defined in [types/src/index.ts:16](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/types/src/index.ts#L16)* ___ @@ -3064,7 +2947,7 @@ ___ *Inherited from [Order](#interface-order).[makerAssetAmount](#makerassetamount)* -*Defined in [types/src/index.ts:20](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/types/src/index.ts#L20)* +*Defined in [types/src/index.ts:20](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/types/src/index.ts#L20)* ___ @@ -3074,7 +2957,7 @@ ___ *Inherited from [Order](#interface-order).[makerAssetData](#makerassetdata)* -*Defined in [types/src/index.ts:26](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/types/src/index.ts#L26)* +*Defined in [types/src/index.ts:26](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/types/src/index.ts#L26)* ___ @@ -3084,7 +2967,7 @@ ___ *Inherited from [Order](#interface-order).[makerFee](#makerfee)* -*Defined in [types/src/index.ts:22](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/types/src/index.ts#L22)* +*Defined in [types/src/index.ts:22](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/types/src/index.ts#L22)* ___ @@ -3094,7 +2977,7 @@ ___ *Inherited from [Order](#interface-order).[makerFeeAssetData](#makerfeeassetdata)* -*Defined in [types/src/index.ts:28](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/types/src/index.ts#L28)* +*Defined in [types/src/index.ts:28](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/types/src/index.ts#L28)* ___ @@ -3104,7 +2987,7 @@ ___ *Inherited from [Order](#interface-order).[salt](#salt)* -*Defined in [types/src/index.ts:25](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/types/src/index.ts#L25)* +*Defined in [types/src/index.ts:25](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/types/src/index.ts#L25)* ___ @@ -3114,7 +2997,7 @@ ___ *Inherited from [Order](#interface-order).[senderAddress](#senderaddress)* -*Defined in [types/src/index.ts:19](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/types/src/index.ts#L19)* +*Defined in [types/src/index.ts:19](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/types/src/index.ts#L19)* ___ @@ -3122,7 +3005,7 @@ ___ • **signature**: *string* -*Defined in [types/src/index.ts:33](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/types/src/index.ts#L33)* +*Defined in [types/src/index.ts:33](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/types/src/index.ts#L33)* ___ @@ -3132,7 +3015,7 @@ ___ *Inherited from [Order](#interface-order).[takerAddress](#takeraddress)* -*Defined in [types/src/index.ts:17](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/types/src/index.ts#L17)* +*Defined in [types/src/index.ts:17](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/types/src/index.ts#L17)* ___ @@ -3142,7 +3025,7 @@ ___ *Inherited from [Order](#interface-order).[takerAssetAmount](#takerassetamount)* -*Defined in [types/src/index.ts:21](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/types/src/index.ts#L21)* +*Defined in [types/src/index.ts:21](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/types/src/index.ts#L21)* ___ @@ -3152,7 +3035,7 @@ ___ *Inherited from [Order](#interface-order).[takerAssetData](#takerassetdata)* -*Defined in [types/src/index.ts:27](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/types/src/index.ts#L27)* +*Defined in [types/src/index.ts:27](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/types/src/index.ts#L27)* ___ @@ -3162,7 +3045,7 @@ ___ *Inherited from [Order](#interface-order).[takerFee](#takerfee)* -*Defined in [types/src/index.ts:23](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/types/src/index.ts#L23)* +*Defined in [types/src/index.ts:23](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/types/src/index.ts#L23)* ___ @@ -3172,7 +3055,7 @@ ___ *Inherited from [Order](#interface-order).[takerFeeAssetData](#takerfeeassetdata)* -*Defined in [types/src/index.ts:29](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/types/src/index.ts#L29)* +*Defined in [types/src/index.ts:29](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/types/src/index.ts#L29)*
@@ -3204,6 +3087,33 @@ ___ + + + + + + + + + + + + + + + + + + + + + +## Type aliases + + + + + @@ -3249,7 +3159,7 @@ ___ Ƭ **SwapQuote**: *[MarketBuySwapQuote](#interface-marketbuyswapquote) | [MarketSellSwapQuote](#interface-marketsellswapquote)* -*Defined in [asset-swapper/src/types.ts:196](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/types.ts#L196)* +*Defined in [asset-swapper/src/types.ts:205](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/types.ts#L205)*
@@ -3262,13 +3172,13 @@ ___ #### â–ª **affiliateFeeUtils**: *object* -*Defined in [asset-swapper/src/utils/affiliate_fee_utils.ts:8](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/utils/affiliate_fee_utils.ts#L8)* +*Defined in [asset-swapper/src/utils/affiliate_fee_utils.ts:7](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/utils/affiliate_fee_utils.ts#L7)* #### getTotalEthAmountWithAffiliateFee â–¸ **getTotalEthAmountWithAffiliateFee**(`swapQuoteInfo`: [SwapQuoteInfo](#interface-swapquoteinfo), `feePercentage`: number): *`BigNumber`* -*Defined in [asset-swapper/src/utils/affiliate_fee_utils.ts:14](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/asset-swapper/src/utils/affiliate_fee_utils.ts#L14)* +*Defined in [asset-swapper/src/utils/affiliate_fee_utils.ts:13](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/utils/affiliate_fee_utils.ts#L13)* Get the amount of eth to send for a forwarder contract call (includes takerAssetAmount, protocol fees, and specified affiliate fee amount) @@ -3285,7 +3195,47 @@ Name | Type | Description | -
+ +## Object literals + +#### `Const` protocolFeeUtils + +#### â–ª **protocolFeeUtils**: *object* + +*Defined in [asset-swapper/src/utils/protocol_fee_utils.ts:9](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/utils/protocol_fee_utils.ts#L9)* + +#### calculateWorstCaseProtocolFee + +â–¸ **calculateWorstCaseProtocolFee**<**T**>(`orders`: `T`[], `gasPrice`: `BigNumber`): *`BigNumber`* + +*Defined in [asset-swapper/src/utils/protocol_fee_utils.ts:27](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/utils/protocol_fee_utils.ts#L27)* + +Calculates protocol fee with protofol fee multiplier for each fill. + +**Type parameters:** + +â–ª **T**: *`Order`* + +**Parameters:** + +Name | Type | +------ | ------ | +`orders` | `T`[] | +`gasPrice` | `BigNumber` | + +**Returns:** *`BigNumber`* + +#### getGasPriceEstimationOrThrowAsync + +â–¸ **getGasPriceEstimationOrThrowAsync**(): *`Promise`* + +*Defined in [asset-swapper/src/utils/protocol_fee_utils.ts:13](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/asset-swapper/src/utils/protocol_fee_utils.ts#L13)* + +Gets 'fast' gas price from Eth Gas Station. + +**Returns:** *`Promise`* + +
@@ -3300,7 +3250,7 @@ Name | Type | Description | Ƭ **ConstructorStateMutability**: *"nonpayable" | "payable"* -*Defined in [ethereum-types/src/index.ts:84](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/ethereum-types/src/index.ts#L84)* +*Defined in [ethereum-types/src/index.ts:84](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/ethereum-types/src/index.ts#L84)* ___ @@ -3314,7 +3264,7 @@ ___ Ƭ **EIP1193Event**: *"accountsChanged" | "networkChanged" | "close" | "connect" | "notification"* -*Defined in [ethereum-types/src/index.ts:70](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/ethereum-types/src/index.ts#L70)* +*Defined in [ethereum-types/src/index.ts:70](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/ethereum-types/src/index.ts#L70)* Interface for providers that conform to EIP 1193 Source: https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1193.md @@ -3331,7 +3281,7 @@ ___ Ƭ **JSONRPCErrorCallback**: *function* -*Defined in [ethereum-types/src/index.ts:3](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/ethereum-types/src/index.ts#L3)* +*Defined in [ethereum-types/src/index.ts:3](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/ethereum-types/src/index.ts#L3)* #### Type declaration: @@ -3358,7 +3308,7 @@ ___ Ƭ **StateMutability**: *"pure" | "view" | [ConstructorStateMutability](#constructorstatemutability)* -*Defined in [ethereum-types/src/index.ts:85](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/ethereum-types/src/index.ts#L85)* +*Defined in [ethereum-types/src/index.ts:85](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/ethereum-types/src/index.ts#L85)* ___ @@ -3366,7 +3316,7 @@ ___ Ƭ **SupportedProvider**: *[Web3JsProvider](_ethereum_types_src_index_.md#web3jsprovider) | [GanacheProvider](#interface-ganacheprovider) | [EIP1193Provider](#interface-eip1193provider) | [ZeroExProvider](#interface-zeroexprovider)* -*Defined in [ethereum-types/src/index.ts:9](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/ethereum-types/src/index.ts#L9)* +*Defined in [ethereum-types/src/index.ts:9](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/ethereum-types/src/index.ts#L9)* Do not create your own provider. Use an existing provider from a Web3 or ProviderEngine library Read more about Providers in the guides section of the 0x docs. @@ -3381,7 +3331,7 @@ ___ Ƭ **Web3JsProvider**: *[Web3JsV1Provider](#interface-web3jsv1provider) | [Web3JsV2Provider](#interface-web3jsv2provider) | [Web3JsV3Provider](#interface-web3jsv3provider)* -*Defined in [ethereum-types/src/index.ts:11](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/ethereum-types/src/index.ts#L11)* +*Defined in [ethereum-types/src/index.ts:11](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/ethereum-types/src/index.ts#L11)*
@@ -3394,7 +3344,7 @@ ___ • **DEFAULT_TOKEN_PRECISION**: *`18`* = 18 -*Defined in [orderbook/src/order_provider/base_order_provider.ts:9](https://github.com/0xProject/0x-monorepo/blob/de3680125/packages/orderbook/src/order_provider/base_order_provider.ts#L9)* +*Defined in [orderbook/src/order_provider/base_order_provider.ts:9](https://github.com/0xProject/0x-monorepo/blob/36d7afd2a/packages/orderbook/src/order_provider/base_order_provider.ts#L9)*
@@ -3416,35 +3366,3 @@ ___ ## Type aliases - - - - -## Type aliases - - - - - - - - - - - - - - - - - - - - - - - - - -
- diff --git a/packages/asset-swapper/src/swap_quoter.ts b/packages/asset-swapper/src/swap_quoter.ts index 8ee3aba97b..bdb52786dd 100644 --- a/packages/asset-swapper/src/swap_quoter.ts +++ b/packages/asset-swapper/src/swap_quoter.ts @@ -1,4 +1,4 @@ -import { DevUtilsContract, ExchangeContract } from '@0x/abi-gen-wrappers'; +import { DevUtilsContract } from '@0x/abi-gen-wrappers'; import { ContractAddresses, getContractAddressesForChainOrThrow } from '@0x/contract-addresses'; import { schemas } from '@0x/json-schemas'; import { SignedOrder } from '@0x/order-utils'; @@ -37,7 +37,6 @@ export class SwapQuoter { private readonly _protocolFeeUtils: ProtocolFeeUtils; private readonly _orderPruner: OrderPruner; private readonly _devUtilsContract: DevUtilsContract; - private readonly _exchangeContract: ExchangeContract; /** * Instantiates a new SwapQuoter instance given existing liquidity in the form of orders and feeOrders. * @param supportedProvider The Provider instance you would like to use for interacting with the Ethereum network. @@ -156,7 +155,6 @@ export class SwapQuoter { this.permittedOrderFeeTypes = permittedOrderFeeTypes; this._contractAddresses = getContractAddressesForChainOrThrow(chainId); this._devUtilsContract = new DevUtilsContract(this._contractAddresses.devUtils, provider); - this._exchangeContract = new ExchangeContract(this._contractAddresses.exchange, provider); this._protocolFeeUtils = new ProtocolFeeUtils(); this._orderPruner = new OrderPruner(this._devUtilsContract, { expiryBufferMs: this.expiryBufferMs, 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 d5c63b1824..5fd5f63e51 100644 --- a/packages/asset-swapper/test/forwarder_swap_quote_consumer_test.ts +++ b/packages/asset-swapper/test/forwarder_swap_quote_consumer_test.ts @@ -1,4 +1,4 @@ -import { DevUtilsContract, ERC20TokenContract, ExchangeContract, ForwarderContract } from '@0x/abi-gen-wrappers'; +import { DevUtilsContract, ERC20TokenContract, ForwarderContract } from '@0x/abi-gen-wrappers'; import { ContractAddresses } from '@0x/contract-addresses'; import { constants as devConstants, OrderFactory } from '@0x/contracts-test-utils'; import { BlockchainLifecycle, tokenUtils } from '@0x/dev-utils'; @@ -82,7 +82,6 @@ describe('ForwarderSwapQuoteConsumer', () => { let contractAddresses: ContractAddresses; let erc20TokenContract: ERC20TokenContract; let forwarderContract: ForwarderContract; - let exchangeContract: ExchangeContract; let orders: PrunedSignedOrder[]; let invalidOrders: PrunedSignedOrder[]; @@ -104,7 +103,6 @@ describe('ForwarderSwapQuoteConsumer', () => { [makerTokenAddress, takerTokenAddress] = tokenUtils.getDummyERC20TokenAddresses(); erc20TokenContract = new ERC20TokenContract(makerTokenAddress, provider); forwarderContract = new ForwarderContract(contractAddresses.forwarder, provider); - exchangeContract = new ExchangeContract(contractAddresses.exchange, provider); const devUtils = new DevUtilsContract(contractAddresses.devUtils, provider); [makerAssetData, takerAssetData, wethAssetData] = await Promise.all([ devUtils.encodeERC20AssetData(makerTokenAddress).callAsync(), diff --git a/packages/asset-swapper/test/swap_quote_consumer_utils_test.ts b/packages/asset-swapper/test/swap_quote_consumer_utils_test.ts index d75621f5da..8b96c0402c 100644 --- a/packages/asset-swapper/test/swap_quote_consumer_utils_test.ts +++ b/packages/asset-swapper/test/swap_quote_consumer_utils_test.ts @@ -1,4 +1,4 @@ -import { DevUtilsContract, ExchangeContract, WETH9Contract } from '@0x/abi-gen-wrappers'; +import { DevUtilsContract, WETH9Contract } from '@0x/abi-gen-wrappers'; import { ContractAddresses } from '@0x/contract-addresses'; import { constants as devConstants, OrderFactory } from '@0x/contracts-test-utils'; import { BlockchainLifecycle, tokenUtils } from '@0x/dev-utils'; @@ -69,7 +69,6 @@ const PARTIAL_LARGE_PRUNED_SIGNED_ORDERS: Array> = [ describe('swapQuoteConsumerUtils', () => { let wethContract: WETH9Contract; let protocolFeeUtils: ProtocolFeeUtils; - let exchangeContract: ExchangeContract; let userAddresses: string[]; let makerAddress: string; let takerAddress: string; @@ -90,7 +89,6 @@ describe('swapQuoteConsumerUtils', () => { userAddresses = await web3Wrapper.getAvailableAddressesAsync(); const devUtils = new DevUtilsContract(contractAddresses.devUtils, provider); wethContract = new WETH9Contract(contractAddresses.etherToken, provider); - exchangeContract = new ExchangeContract(contractAddresses.exchange, provider); [takerAddress, makerAddress] = userAddresses; [makerTokenAddress, takerTokenAddress] = tokenUtils.getDummyERC20TokenAddresses(); [makerAssetData, takerAssetData, wethAssetData] = [ diff --git a/packages/contract-artifacts/artifacts/DevUtils.json b/packages/contract-artifacts/artifacts/DevUtils.json index 331efa53e2..fb2385c3fb 100644 --- a/packages/contract-artifacts/artifacts/DevUtils.json +++ b/packages/contract-artifacts/artifacts/DevUtils.json @@ -4,7 +4,13 @@ "compilerOutput": { "abi": [ { - "inputs": [{ "internalType": "address", "name": "_exchange", "type": "address" }], + "inputs": [ + { + "internalType": "address", + "name": "_exchange", + "type": "address" + } + ], "payable": false, "stateMutability": "nonpayable", "type": "constructor" @@ -13,14 +19,26 @@ "constant": true, "inputs": [], "name": "EIP712_EXCHANGE_DOMAIN_HASH", - "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, - "inputs": [{ "internalType": "bytes", "name": "encoded", "type": "bytes" }], + "inputs": [ + { + "internalType": "bytes", + "name": "encoded", + "type": "bytes" + } + ], "name": "decodeAssetProxyDispatchError", "outputs": [ { @@ -28,8 +46,16 @@ "name": "errorCode", "type": "uint8" }, - { "internalType": "bytes32", "name": "orderHash", "type": "bytes32" }, - { "internalType": "bytes", "name": "assetData", "type": "bytes" } + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "assetData", + "type": "bytes" + } ], "payable": false, "stateMutability": "pure", @@ -37,11 +63,25 @@ }, { "constant": true, - "inputs": [{ "internalType": "bytes", "name": "encoded", "type": "bytes" }], + "inputs": [ + { + "internalType": "bytes", + "name": "encoded", + "type": "bytes" + } + ], "name": "decodeAssetProxyExistsError", "outputs": [ - { "internalType": "bytes4", "name": "assetProxyId", "type": "bytes4" }, - { "internalType": "address", "name": "assetProxyAddress", "type": "address" } + { + "internalType": "bytes4", + "name": "assetProxyId", + "type": "bytes4" + }, + { + "internalType": "address", + "name": "assetProxyAddress", + "type": "address" + } ], "payable": false, "stateMutability": "pure", @@ -49,21 +89,51 @@ }, { "constant": true, - "inputs": [{ "internalType": "bytes", "name": "assetData", "type": "bytes" }], + "inputs": [ + { + "internalType": "bytes", + "name": "assetData", + "type": "bytes" + } + ], "name": "decodeAssetProxyId", - "outputs": [{ "internalType": "bytes4", "name": "assetProxyId", "type": "bytes4" }], + "outputs": [ + { + "internalType": "bytes4", + "name": "assetProxyId", + "type": "bytes4" + } + ], "payable": false, "stateMutability": "pure", "type": "function" }, { "constant": true, - "inputs": [{ "internalType": "bytes", "name": "encoded", "type": "bytes" }], + "inputs": [ + { + "internalType": "bytes", + "name": "encoded", + "type": "bytes" + } + ], "name": "decodeAssetProxyTransferError", "outputs": [ - { "internalType": "bytes32", "name": "orderHash", "type": "bytes32" }, - { "internalType": "bytes", "name": "assetData", "type": "bytes" }, - { "internalType": "bytes", "name": "errorData", "type": "bytes" } + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "assetData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "errorData", + "type": "bytes" + } ], "payable": false, "stateMutability": "pure", @@ -71,13 +141,35 @@ }, { "constant": true, - "inputs": [{ "internalType": "bytes", "name": "encoded", "type": "bytes" }], + "inputs": [ + { + "internalType": "bytes", + "name": "encoded", + "type": "bytes" + } + ], "name": "decodeEIP1271SignatureError", "outputs": [ - { "internalType": "address", "name": "verifyingContractAddress", "type": "address" }, - { "internalType": "bytes", "name": "data", "type": "bytes" }, - { "internalType": "bytes", "name": "signature", "type": "bytes" }, - { "internalType": "bytes", "name": "errorData", "type": "bytes" } + { + "internalType": "address", + "name": "verifyingContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "errorData", + "type": "bytes" + } ], "payable": false, "stateMutability": "pure", @@ -85,14 +177,40 @@ }, { "constant": true, - "inputs": [{ "internalType": "bytes", "name": "assetData", "type": "bytes" }], + "inputs": [ + { + "internalType": "bytes", + "name": "assetData", + "type": "bytes" + } + ], "name": "decodeERC1155AssetData", "outputs": [ - { "internalType": "bytes4", "name": "assetProxyId", "type": "bytes4" }, - { "internalType": "address", "name": "tokenAddress", "type": "address" }, - { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" }, - { "internalType": "uint256[]", "name": "tokenValues", "type": "uint256[]" }, - { "internalType": "bytes", "name": "callbackData", "type": "bytes" } + { + "internalType": "bytes4", + "name": "assetProxyId", + "type": "bytes4" + }, + { + "internalType": "address", + "name": "tokenAddress", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "tokenIds", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "tokenValues", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "callbackData", + "type": "bytes" + } ], "payable": false, "stateMutability": "pure", @@ -100,11 +218,25 @@ }, { "constant": true, - "inputs": [{ "internalType": "bytes", "name": "assetData", "type": "bytes" }], + "inputs": [ + { + "internalType": "bytes", + "name": "assetData", + "type": "bytes" + } + ], "name": "decodeERC20AssetData", "outputs": [ - { "internalType": "bytes4", "name": "assetProxyId", "type": "bytes4" }, - { "internalType": "address", "name": "tokenAddress", "type": "address" } + { + "internalType": "bytes4", + "name": "assetProxyId", + "type": "bytes4" + }, + { + "internalType": "address", + "name": "tokenAddress", + "type": "address" + } ], "payable": false, "stateMutability": "pure", @@ -112,12 +244,30 @@ }, { "constant": true, - "inputs": [{ "internalType": "bytes", "name": "assetData", "type": "bytes" }], + "inputs": [ + { + "internalType": "bytes", + "name": "assetData", + "type": "bytes" + } + ], "name": "decodeERC721AssetData", "outputs": [ - { "internalType": "bytes4", "name": "assetProxyId", "type": "bytes4" }, - { "internalType": "address", "name": "tokenAddress", "type": "address" }, - { "internalType": "uint256", "name": "tokenId", "type": "uint256" } + { + "internalType": "bytes4", + "name": "assetProxyId", + "type": "bytes4" + }, + { + "internalType": "address", + "name": "tokenAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } ], "payable": false, "stateMutability": "pure", @@ -125,7 +275,13 @@ }, { "constant": true, - "inputs": [{ "internalType": "bytes", "name": "encoded", "type": "bytes" }], + "inputs": [ + { + "internalType": "bytes", + "name": "encoded", + "type": "bytes" + } + ], "name": "decodeExchangeInvalidContextError", "outputs": [ { @@ -133,8 +289,16 @@ "name": "errorCode", "type": "uint8" }, - { "internalType": "bytes32", "name": "orderHash", "type": "bytes32" }, - { "internalType": "address", "name": "contextAddress", "type": "address" } + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "contextAddress", + "type": "address" + } ], "payable": false, "stateMutability": "pure", @@ -142,7 +306,13 @@ }, { "constant": true, - "inputs": [{ "internalType": "bytes", "name": "encoded", "type": "bytes" }], + "inputs": [ + { + "internalType": "bytes", + "name": "encoded", + "type": "bytes" + } + ], "name": "decodeFillError", "outputs": [ { @@ -150,7 +320,11 @@ "name": "errorCode", "type": "uint8" }, - { "internalType": "bytes32", "name": "orderHash", "type": "bytes32" } + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } ], "payable": false, "stateMutability": "pure", @@ -158,7 +332,13 @@ }, { "constant": true, - "inputs": [{ "internalType": "bytes", "name": "encoded", "type": "bytes" }], + "inputs": [ + { + "internalType": "bytes", + "name": "encoded", + "type": "bytes" + } + ], "name": "decodeIncompleteFillError", "outputs": [ { @@ -166,8 +346,16 @@ "name": "errorCode", "type": "uint8" }, - { "internalType": "uint256", "name": "expectedAssetFillAmount", "type": "uint256" }, - { "internalType": "uint256", "name": "actualAssetFillAmount", "type": "uint256" } + { + "internalType": "uint256", + "name": "expectedAssetFillAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "actualAssetFillAmount", + "type": "uint256" + } ], "payable": false, "stateMutability": "pure", @@ -175,12 +363,30 @@ }, { "constant": true, - "inputs": [{ "internalType": "bytes", "name": "assetData", "type": "bytes" }], + "inputs": [ + { + "internalType": "bytes", + "name": "assetData", + "type": "bytes" + } + ], "name": "decodeMultiAssetData", "outputs": [ - { "internalType": "bytes4", "name": "assetProxyId", "type": "bytes4" }, - { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" }, - { "internalType": "bytes[]", "name": "nestedAssetData", "type": "bytes[]" } + { + "internalType": "bytes4", + "name": "assetProxyId", + "type": "bytes4" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "nestedAssetData", + "type": "bytes[]" + } ], "payable": false, "stateMutability": "pure", @@ -188,11 +394,25 @@ }, { "constant": true, - "inputs": [{ "internalType": "bytes", "name": "encoded", "type": "bytes" }], + "inputs": [ + { + "internalType": "bytes", + "name": "encoded", + "type": "bytes" + } + ], "name": "decodeNegativeSpreadError", "outputs": [ - { "internalType": "bytes32", "name": "leftOrderHash", "type": "bytes32" }, - { "internalType": "bytes32", "name": "rightOrderHash", "type": "bytes32" } + { + "internalType": "bytes32", + "name": "leftOrderHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "rightOrderHash", + "type": "bytes32" + } ], "payable": false, "stateMutability": "pure", @@ -200,12 +420,30 @@ }, { "constant": true, - "inputs": [{ "internalType": "bytes", "name": "encoded", "type": "bytes" }], + "inputs": [ + { + "internalType": "bytes", + "name": "encoded", + "type": "bytes" + } + ], "name": "decodeOrderEpochError", "outputs": [ - { "internalType": "address", "name": "makerAddress", "type": "address" }, - { "internalType": "address", "name": "orderSenderAddress", "type": "address" }, - { "internalType": "uint256", "name": "currentEpoch", "type": "uint256" } + { + "internalType": "address", + "name": "makerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "orderSenderAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "currentEpoch", + "type": "uint256" + } ], "payable": false, "stateMutability": "pure", @@ -213,11 +451,25 @@ }, { "constant": true, - "inputs": [{ "internalType": "bytes", "name": "encoded", "type": "bytes" }], + "inputs": [ + { + "internalType": "bytes", + "name": "encoded", + "type": "bytes" + } + ], "name": "decodeOrderStatusError", "outputs": [ - { "internalType": "bytes32", "name": "orderHash", "type": "bytes32" }, - { "internalType": "enum LibOrder.OrderStatus", "name": "orderStatus", "type": "uint8" } + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + }, + { + "internalType": "enum LibOrder.OrderStatus", + "name": "orderStatus", + "type": "uint8" + } ], "payable": false, "stateMutability": "pure", @@ -225,7 +477,13 @@ }, { "constant": true, - "inputs": [{ "internalType": "bytes", "name": "encoded", "type": "bytes" }], + "inputs": [ + { + "internalType": "bytes", + "name": "encoded", + "type": "bytes" + } + ], "name": "decodeSignatureError", "outputs": [ { @@ -233,9 +491,21 @@ "name": "errorCode", "type": "uint8" }, - { "internalType": "bytes32", "name": "hash", "type": "bytes32" }, - { "internalType": "address", "name": "signerAddress", "type": "address" }, - { "internalType": "bytes", "name": "signature", "type": "bytes" } + { + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "signerAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } ], "payable": false, "stateMutability": "pure", @@ -243,11 +513,25 @@ }, { "constant": true, - "inputs": [{ "internalType": "bytes", "name": "encoded", "type": "bytes" }], + "inputs": [ + { + "internalType": "bytes", + "name": "encoded", + "type": "bytes" + } + ], "name": "decodeSignatureValidatorNotApprovedError", "outputs": [ - { "internalType": "address", "name": "signerAddress", "type": "address" }, - { "internalType": "address", "name": "validatorAddress", "type": "address" } + { + "internalType": "address", + "name": "signerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "validatorAddress", + "type": "address" + } ], "payable": false, "stateMutability": "pure", @@ -255,13 +539,35 @@ }, { "constant": true, - "inputs": [{ "internalType": "bytes", "name": "encoded", "type": "bytes" }], + "inputs": [ + { + "internalType": "bytes", + "name": "encoded", + "type": "bytes" + } + ], "name": "decodeSignatureWalletError", "outputs": [ - { "internalType": "bytes32", "name": "hash", "type": "bytes32" }, - { "internalType": "address", "name": "signerAddress", "type": "address" }, - { "internalType": "bytes", "name": "signature", "type": "bytes" }, - { "internalType": "bytes", "name": "errorData", "type": "bytes" } + { + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "signerAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "errorData", + "type": "bytes" + } ], "payable": false, "stateMutability": "pure", @@ -269,13 +575,35 @@ }, { "constant": true, - "inputs": [{ "internalType": "bytes", "name": "assetData", "type": "bytes" }], + "inputs": [ + { + "internalType": "bytes", + "name": "assetData", + "type": "bytes" + } + ], "name": "decodeStaticCallAssetData", "outputs": [ - { "internalType": "bytes4", "name": "assetProxyId", "type": "bytes4" }, - { "internalType": "address", "name": "staticCallTargetAddress", "type": "address" }, - { "internalType": "bytes", "name": "staticCallData", "type": "bytes" }, - { "internalType": "bytes32", "name": "expectedReturnDataHash", "type": "bytes32" } + { + "internalType": "bytes4", + "name": "assetProxyId", + "type": "bytes4" + }, + { + "internalType": "address", + "name": "staticCallTargetAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "staticCallData", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "expectedReturnDataHash", + "type": "bytes32" + } ], "payable": false, "stateMutability": "pure", @@ -283,7 +611,13 @@ }, { "constant": true, - "inputs": [{ "internalType": "bytes", "name": "encoded", "type": "bytes" }], + "inputs": [ + { + "internalType": "bytes", + "name": "encoded", + "type": "bytes" + } + ], "name": "decodeTransactionError", "outputs": [ { @@ -291,7 +625,11 @@ "name": "errorCode", "type": "uint8" }, - { "internalType": "bytes32", "name": "transactionHash", "type": "bytes32" } + { + "internalType": "bytes32", + "name": "transactionHash", + "type": "bytes32" + } ], "payable": false, "stateMutability": "pure", @@ -299,11 +637,25 @@ }, { "constant": true, - "inputs": [{ "internalType": "bytes", "name": "encoded", "type": "bytes" }], + "inputs": [ + { + "internalType": "bytes", + "name": "encoded", + "type": "bytes" + } + ], "name": "decodeTransactionExecutionError", "outputs": [ - { "internalType": "bytes32", "name": "transactionHash", "type": "bytes32" }, - { "internalType": "bytes", "name": "errorData", "type": "bytes" } + { + "internalType": "bytes32", + "name": "transactionHash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "errorData", + "type": "bytes" + } ], "payable": false, "stateMutability": "pure", @@ -311,33 +663,107 @@ }, { "constant": true, - "inputs": [{ "internalType": "bytes", "name": "transactionData", "type": "bytes" }], + "inputs": [ + { + "internalType": "bytes", + "name": "transactionData", + "type": "bytes" + } + ], "name": "decodeZeroExTransactionData", "outputs": [ - { "internalType": "string", "name": "functionName", "type": "string" }, + { + "internalType": "string", + "name": "functionName", + "type": "string" + }, { "components": [ - { "internalType": "address", "name": "makerAddress", "type": "address" }, - { "internalType": "address", "name": "takerAddress", "type": "address" }, - { "internalType": "address", "name": "feeRecipientAddress", "type": "address" }, - { "internalType": "address", "name": "senderAddress", "type": "address" }, - { "internalType": "uint256", "name": "makerAssetAmount", "type": "uint256" }, - { "internalType": "uint256", "name": "takerAssetAmount", "type": "uint256" }, - { "internalType": "uint256", "name": "makerFee", "type": "uint256" }, - { "internalType": "uint256", "name": "takerFee", "type": "uint256" }, - { "internalType": "uint256", "name": "expirationTimeSeconds", "type": "uint256" }, - { "internalType": "uint256", "name": "salt", "type": "uint256" }, - { "internalType": "bytes", "name": "makerAssetData", "type": "bytes" }, - { "internalType": "bytes", "name": "takerAssetData", "type": "bytes" }, - { "internalType": "bytes", "name": "makerFeeAssetData", "type": "bytes" }, - { "internalType": "bytes", "name": "takerFeeAssetData", "type": "bytes" } + { + "internalType": "address", + "name": "makerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "takerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "feeRecipientAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "senderAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "makerAssetAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "takerAssetAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "makerFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "takerFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expirationTimeSeconds", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "makerAssetData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "takerAssetData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "makerFeeAssetData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "takerFeeAssetData", + "type": "bytes" + } ], "internalType": "struct LibOrder.Order[]", "name": "orders", "type": "tuple[]" }, - { "internalType": "uint256[]", "name": "takerAssetFillAmounts", "type": "uint256[]" }, - { "internalType": "bytes[]", "name": "signatures", "type": "bytes[]" } + { + "internalType": "uint256[]", + "name": "takerAssetFillAmounts", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "signatures", + "type": "bytes[]" + } ], "payable": false, "stateMutability": "pure", @@ -346,22 +772,35 @@ { "constant": true, "inputs": [ - { "internalType": "address", "name": "tokenAddress", "type": "address" }, - { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" }, - { "internalType": "uint256[]", "name": "tokenValues", "type": "uint256[]" }, - { "internalType": "bytes", "name": "callbackData", "type": "bytes" } + { + "internalType": "address", + "name": "tokenAddress", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "tokenIds", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "tokenValues", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "callbackData", + "type": "bytes" + } ], "name": "encodeERC1155AssetData", - "outputs": [{ "internalType": "bytes", "name": "assetData", "type": "bytes" }], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [{ "internalType": "address", "name": "tokenAddress", "type": "address" }], - "name": "encodeERC20AssetData", - "outputs": [{ "internalType": "bytes", "name": "assetData", "type": "bytes" }], + "outputs": [ + { + "internalType": "bytes", + "name": "assetData", + "type": "bytes" + } + ], "payable": false, "stateMutability": "pure", "type": "function" @@ -369,11 +808,46 @@ { "constant": true, "inputs": [ - { "internalType": "address", "name": "tokenAddress", "type": "address" }, - { "internalType": "uint256", "name": "tokenId", "type": "uint256" } + { + "internalType": "address", + "name": "tokenAddress", + "type": "address" + } + ], + "name": "encodeERC20AssetData", + "outputs": [ + { + "internalType": "bytes", + "name": "assetData", + "type": "bytes" + } + ], + "payable": false, + "stateMutability": "pure", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "tokenAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } ], "name": "encodeERC721AssetData", - "outputs": [{ "internalType": "bytes", "name": "assetData", "type": "bytes" }], + "outputs": [ + { + "internalType": "bytes", + "name": "assetData", + "type": "bytes" + } + ], "payable": false, "stateMutability": "pure", "type": "function" @@ -381,11 +855,25 @@ { "constant": true, "inputs": [ - { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" }, - { "internalType": "bytes[]", "name": "nestedAssetData", "type": "bytes[]" } + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "nestedAssetData", + "type": "bytes[]" + } ], "name": "encodeMultiAssetData", - "outputs": [{ "internalType": "bytes", "name": "assetData", "type": "bytes" }], + "outputs": [ + { + "internalType": "bytes", + "name": "assetData", + "type": "bytes" + } + ], "payable": false, "stateMutability": "pure", "type": "function" @@ -393,12 +881,30 @@ { "constant": true, "inputs": [ - { "internalType": "address", "name": "staticCallTargetAddress", "type": "address" }, - { "internalType": "bytes", "name": "staticCallData", "type": "bytes" }, - { "internalType": "bytes32", "name": "expectedReturnDataHash", "type": "bytes32" } + { + "internalType": "address", + "name": "staticCallTargetAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "staticCallData", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "expectedReturnDataHash", + "type": "bytes32" + } ], "name": "encodeStaticCallAssetData", - "outputs": [{ "internalType": "bytes", "name": "assetData", "type": "bytes" }], + "outputs": [ + { + "internalType": "bytes", + "name": "assetData", + "type": "bytes" + } + ], "payable": false, "stateMutability": "pure", "type": "function" @@ -406,11 +912,25 @@ { "constant": true, "inputs": [ - { "internalType": "address", "name": "ownerAddress", "type": "address" }, - { "internalType": "bytes", "name": "assetData", "type": "bytes" } + { + "internalType": "address", + "name": "ownerAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "assetData", + "type": "bytes" + } ], "name": "getAssetProxyAllowance", - "outputs": [{ "internalType": "uint256", "name": "allowance", "type": "uint256" }], + "outputs": [ + { + "internalType": "uint256", + "name": "allowance", + "type": "uint256" + } + ], "payable": false, "stateMutability": "view", "type": "function" @@ -418,11 +938,25 @@ { "constant": true, "inputs": [ - { "internalType": "address", "name": "ownerAddress", "type": "address" }, - { "internalType": "bytes", "name": "assetData", "type": "bytes" } + { + "internalType": "address", + "name": "ownerAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "assetData", + "type": "bytes" + } ], "name": "getBalance", - "outputs": [{ "internalType": "uint256", "name": "balance", "type": "uint256" }], + "outputs": [ + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + } + ], "payable": false, "stateMutability": "view", "type": "function" @@ -430,13 +964,29 @@ { "constant": true, "inputs": [ - { "internalType": "address", "name": "ownerAddress", "type": "address" }, - { "internalType": "bytes", "name": "assetData", "type": "bytes" } + { + "internalType": "address", + "name": "ownerAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "assetData", + "type": "bytes" + } ], "name": "getBalanceAndAssetProxyAllowance", "outputs": [ - { "internalType": "uint256", "name": "balance", "type": "uint256" }, - { "internalType": "uint256", "name": "allowance", "type": "uint256" } + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "allowance", + "type": "uint256" + } ], "payable": false, "stateMutability": "view", @@ -445,11 +995,25 @@ { "constant": true, "inputs": [ - { "internalType": "address", "name": "ownerAddress", "type": "address" }, - { "internalType": "bytes[]", "name": "assetData", "type": "bytes[]" } + { + "internalType": "address", + "name": "ownerAddress", + "type": "address" + }, + { + "internalType": "bytes[]", + "name": "assetData", + "type": "bytes[]" + } ], "name": "getBatchAssetProxyAllowances", - "outputs": [{ "internalType": "uint256[]", "name": "allowances", "type": "uint256[]" }], + "outputs": [ + { + "internalType": "uint256[]", + "name": "allowances", + "type": "uint256[]" + } + ], "payable": false, "stateMutability": "view", "type": "function" @@ -457,11 +1021,25 @@ { "constant": true, "inputs": [ - { "internalType": "address", "name": "ownerAddress", "type": "address" }, - { "internalType": "bytes[]", "name": "assetData", "type": "bytes[]" } + { + "internalType": "address", + "name": "ownerAddress", + "type": "address" + }, + { + "internalType": "bytes[]", + "name": "assetData", + "type": "bytes[]" + } ], "name": "getBatchBalances", - "outputs": [{ "internalType": "uint256[]", "name": "balances", "type": "uint256[]" }], + "outputs": [ + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + } + ], "payable": false, "stateMutability": "view", "type": "function" @@ -469,13 +1047,29 @@ { "constant": true, "inputs": [ - { "internalType": "address", "name": "ownerAddress", "type": "address" }, - { "internalType": "bytes[]", "name": "assetData", "type": "bytes[]" } + { + "internalType": "address", + "name": "ownerAddress", + "type": "address" + }, + { + "internalType": "bytes[]", + "name": "assetData", + "type": "bytes[]" + } ], "name": "getBatchBalancesAndAssetProxyAllowances", "outputs": [ - { "internalType": "uint256[]", "name": "balances", "type": "uint256[]" }, - { "internalType": "uint256[]", "name": "allowances", "type": "uint256[]" } + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "allowances", + "type": "uint256[]" + } ], "payable": false, "stateMutability": "view", @@ -483,9 +1077,21 @@ }, { "constant": true, - "inputs": [{ "internalType": "address[]", "name": "addresses", "type": "address[]" }], + "inputs": [ + { + "internalType": "address[]", + "name": "addresses", + "type": "address[]" + } + ], "name": "getEthBalances", - "outputs": [{ "internalType": "uint256[]", "name": "", "type": "uint256[]" }], + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], "payable": false, "stateMutability": "view", "type": "function" @@ -495,30 +1101,100 @@ "inputs": [ { "components": [ - { "internalType": "address", "name": "makerAddress", "type": "address" }, - { "internalType": "address", "name": "takerAddress", "type": "address" }, - { "internalType": "address", "name": "feeRecipientAddress", "type": "address" }, - { "internalType": "address", "name": "senderAddress", "type": "address" }, - { "internalType": "uint256", "name": "makerAssetAmount", "type": "uint256" }, - { "internalType": "uint256", "name": "takerAssetAmount", "type": "uint256" }, - { "internalType": "uint256", "name": "makerFee", "type": "uint256" }, - { "internalType": "uint256", "name": "takerFee", "type": "uint256" }, - { "internalType": "uint256", "name": "expirationTimeSeconds", "type": "uint256" }, - { "internalType": "uint256", "name": "salt", "type": "uint256" }, - { "internalType": "bytes", "name": "makerAssetData", "type": "bytes" }, - { "internalType": "bytes", "name": "takerAssetData", "type": "bytes" }, - { "internalType": "bytes", "name": "makerFeeAssetData", "type": "bytes" }, - { "internalType": "bytes", "name": "takerFeeAssetData", "type": "bytes" } + { + "internalType": "address", + "name": "makerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "takerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "feeRecipientAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "senderAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "makerAssetAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "takerAssetAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "makerFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "takerFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expirationTimeSeconds", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "makerAssetData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "takerAssetData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "makerFeeAssetData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "takerFeeAssetData", + "type": "bytes" + } ], "internalType": "struct LibOrder.Order", "name": "order", "type": "tuple" }, - { "internalType": "uint256", "name": "chainId", "type": "uint256" }, - { "internalType": "address", "name": "exchange", "type": "address" } + { + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "exchange", + "type": "address" + } ], "name": "getOrderHash", - "outputs": [{ "internalType": "bytes32", "name": "orderHash", "type": "bytes32" }], + "outputs": [ + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + } + ], "payable": false, "stateMutability": "pure", "type": "function" @@ -528,41 +1204,121 @@ "inputs": [ { "components": [ - { "internalType": "address", "name": "makerAddress", "type": "address" }, - { "internalType": "address", "name": "takerAddress", "type": "address" }, - { "internalType": "address", "name": "feeRecipientAddress", "type": "address" }, - { "internalType": "address", "name": "senderAddress", "type": "address" }, - { "internalType": "uint256", "name": "makerAssetAmount", "type": "uint256" }, - { "internalType": "uint256", "name": "takerAssetAmount", "type": "uint256" }, - { "internalType": "uint256", "name": "makerFee", "type": "uint256" }, - { "internalType": "uint256", "name": "takerFee", "type": "uint256" }, - { "internalType": "uint256", "name": "expirationTimeSeconds", "type": "uint256" }, - { "internalType": "uint256", "name": "salt", "type": "uint256" }, - { "internalType": "bytes", "name": "makerAssetData", "type": "bytes" }, - { "internalType": "bytes", "name": "takerAssetData", "type": "bytes" }, - { "internalType": "bytes", "name": "makerFeeAssetData", "type": "bytes" }, - { "internalType": "bytes", "name": "takerFeeAssetData", "type": "bytes" } + { + "internalType": "address", + "name": "makerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "takerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "feeRecipientAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "senderAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "makerAssetAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "takerAssetAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "makerFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "takerFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expirationTimeSeconds", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "makerAssetData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "takerAssetData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "makerFeeAssetData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "takerFeeAssetData", + "type": "bytes" + } ], "internalType": "struct LibOrder.Order", "name": "order", "type": "tuple" }, - { "internalType": "bytes", "name": "signature", "type": "bytes" } + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } ], "name": "getOrderRelevantState", "outputs": [ { "components": [ - { "internalType": "uint8", "name": "orderStatus", "type": "uint8" }, - { "internalType": "bytes32", "name": "orderHash", "type": "bytes32" }, - { "internalType": "uint256", "name": "orderTakerAssetFilledAmount", "type": "uint256" } + { + "internalType": "uint8", + "name": "orderStatus", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "orderTakerAssetFilledAmount", + "type": "uint256" + } ], "internalType": "struct LibOrder.OrderInfo", "name": "orderInfo", "type": "tuple" }, - { "internalType": "uint256", "name": "fillableTakerAssetAmount", "type": "uint256" }, - { "internalType": "bool", "name": "isValidSignature", "type": "bool" } + { + "internalType": "uint256", + "name": "fillableTakerAssetAmount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "isValidSignature", + "type": "bool" + } ], "payable": false, "stateMutability": "view", @@ -573,41 +1329,121 @@ "inputs": [ { "components": [ - { "internalType": "address", "name": "makerAddress", "type": "address" }, - { "internalType": "address", "name": "takerAddress", "type": "address" }, - { "internalType": "address", "name": "feeRecipientAddress", "type": "address" }, - { "internalType": "address", "name": "senderAddress", "type": "address" }, - { "internalType": "uint256", "name": "makerAssetAmount", "type": "uint256" }, - { "internalType": "uint256", "name": "takerAssetAmount", "type": "uint256" }, - { "internalType": "uint256", "name": "makerFee", "type": "uint256" }, - { "internalType": "uint256", "name": "takerFee", "type": "uint256" }, - { "internalType": "uint256", "name": "expirationTimeSeconds", "type": "uint256" }, - { "internalType": "uint256", "name": "salt", "type": "uint256" }, - { "internalType": "bytes", "name": "makerAssetData", "type": "bytes" }, - { "internalType": "bytes", "name": "takerAssetData", "type": "bytes" }, - { "internalType": "bytes", "name": "makerFeeAssetData", "type": "bytes" }, - { "internalType": "bytes", "name": "takerFeeAssetData", "type": "bytes" } + { + "internalType": "address", + "name": "makerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "takerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "feeRecipientAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "senderAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "makerAssetAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "takerAssetAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "makerFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "takerFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expirationTimeSeconds", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "makerAssetData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "takerAssetData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "makerFeeAssetData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "takerFeeAssetData", + "type": "bytes" + } ], "internalType": "struct LibOrder.Order[]", "name": "orders", "type": "tuple[]" }, - { "internalType": "bytes[]", "name": "signatures", "type": "bytes[]" } + { + "internalType": "bytes[]", + "name": "signatures", + "type": "bytes[]" + } ], "name": "getOrderRelevantStates", "outputs": [ { "components": [ - { "internalType": "uint8", "name": "orderStatus", "type": "uint8" }, - { "internalType": "bytes32", "name": "orderHash", "type": "bytes32" }, - { "internalType": "uint256", "name": "orderTakerAssetFilledAmount", "type": "uint256" } + { + "internalType": "uint8", + "name": "orderStatus", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "orderHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "orderTakerAssetFilledAmount", + "type": "uint256" + } ], "internalType": "struct LibOrder.OrderInfo[]", "name": "ordersInfo", "type": "tuple[]" }, - { "internalType": "uint256[]", "name": "fillableTakerAssetAmounts", "type": "uint256[]" }, - { "internalType": "bool[]", "name": "isValidSignature", "type": "bool[]" } + { + "internalType": "uint256[]", + "name": "fillableTakerAssetAmounts", + "type": "uint256[]" + }, + { + "internalType": "bool[]", + "name": "isValidSignature", + "type": "bool[]" + } ], "payable": false, "stateMutability": "view", @@ -618,27 +1454,91 @@ "inputs": [ { "components": [ - { "internalType": "address", "name": "makerAddress", "type": "address" }, - { "internalType": "address", "name": "takerAddress", "type": "address" }, - { "internalType": "address", "name": "feeRecipientAddress", "type": "address" }, - { "internalType": "address", "name": "senderAddress", "type": "address" }, - { "internalType": "uint256", "name": "makerAssetAmount", "type": "uint256" }, - { "internalType": "uint256", "name": "takerAssetAmount", "type": "uint256" }, - { "internalType": "uint256", "name": "makerFee", "type": "uint256" }, - { "internalType": "uint256", "name": "takerFee", "type": "uint256" }, - { "internalType": "uint256", "name": "expirationTimeSeconds", "type": "uint256" }, - { "internalType": "uint256", "name": "salt", "type": "uint256" }, - { "internalType": "bytes", "name": "makerAssetData", "type": "bytes" }, - { "internalType": "bytes", "name": "takerAssetData", "type": "bytes" }, - { "internalType": "bytes", "name": "makerFeeAssetData", "type": "bytes" }, - { "internalType": "bytes", "name": "takerFeeAssetData", "type": "bytes" } + { + "internalType": "address", + "name": "makerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "takerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "feeRecipientAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "senderAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "makerAssetAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "takerAssetAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "makerFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "takerFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expirationTimeSeconds", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "makerAssetData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "takerAssetData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "makerFeeAssetData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "takerFeeAssetData", + "type": "bytes" + } ], "internalType": "struct LibOrder.Order", "name": "order", "type": "tuple" }, - { "internalType": "address", "name": "takerAddress", "type": "address" }, - { "internalType": "uint256", "name": "takerAssetFillAmount", "type": "uint256" } + { + "internalType": "address", + "name": "takerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "takerAssetFillAmount", + "type": "uint256" + } ], "name": "getSimulatedOrderTransferResults", "outputs": [ @@ -657,27 +1557,91 @@ "inputs": [ { "components": [ - { "internalType": "address", "name": "makerAddress", "type": "address" }, - { "internalType": "address", "name": "takerAddress", "type": "address" }, - { "internalType": "address", "name": "feeRecipientAddress", "type": "address" }, - { "internalType": "address", "name": "senderAddress", "type": "address" }, - { "internalType": "uint256", "name": "makerAssetAmount", "type": "uint256" }, - { "internalType": "uint256", "name": "takerAssetAmount", "type": "uint256" }, - { "internalType": "uint256", "name": "makerFee", "type": "uint256" }, - { "internalType": "uint256", "name": "takerFee", "type": "uint256" }, - { "internalType": "uint256", "name": "expirationTimeSeconds", "type": "uint256" }, - { "internalType": "uint256", "name": "salt", "type": "uint256" }, - { "internalType": "bytes", "name": "makerAssetData", "type": "bytes" }, - { "internalType": "bytes", "name": "takerAssetData", "type": "bytes" }, - { "internalType": "bytes", "name": "makerFeeAssetData", "type": "bytes" }, - { "internalType": "bytes", "name": "takerFeeAssetData", "type": "bytes" } + { + "internalType": "address", + "name": "makerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "takerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "feeRecipientAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "senderAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "makerAssetAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "takerAssetAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "makerFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "takerFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expirationTimeSeconds", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "makerAssetData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "takerAssetData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "makerFeeAssetData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "takerFeeAssetData", + "type": "bytes" + } ], "internalType": "struct LibOrder.Order[]", "name": "orders", "type": "tuple[]" }, - { "internalType": "address[]", "name": "takerAddresses", "type": "address[]" }, - { "internalType": "uint256[]", "name": "takerAssetFillAmounts", "type": "uint256[]" } + { + "internalType": "address[]", + "name": "takerAddresses", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "takerAssetFillAmounts", + "type": "uint256[]" + } ], "name": "getSimulatedOrdersTransferResults", "outputs": [ @@ -696,21 +1660,55 @@ "inputs": [ { "components": [ - { "internalType": "uint256", "name": "salt", "type": "uint256" }, - { "internalType": "uint256", "name": "expirationTimeSeconds", "type": "uint256" }, - { "internalType": "uint256", "name": "gasPrice", "type": "uint256" }, - { "internalType": "address", "name": "signerAddress", "type": "address" }, - { "internalType": "bytes", "name": "data", "type": "bytes" } + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expirationTimeSeconds", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "gasPrice", + "type": "uint256" + }, + { + "internalType": "address", + "name": "signerAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } ], "internalType": "struct LibZeroExTransaction.ZeroExTransaction", "name": "transaction", "type": "tuple" }, - { "internalType": "uint256", "name": "chainId", "type": "uint256" }, - { "internalType": "address", "name": "exchange", "type": "address" } + { + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "exchange", + "type": "address" + } ], "name": "getTransactionHash", - "outputs": [{ "internalType": "bytes32", "name": "transactionHash", "type": "bytes32" }], + "outputs": [ + { + "internalType": "bytes32", + "name": "transactionHash", + "type": "bytes32" + } + ], "payable": false, "stateMutability": "pure", "type": "function" @@ -718,18 +1716,38 @@ { "constant": true, "inputs": [ - { "internalType": "address", "name": "ownerAddress", "type": "address" }, - { "internalType": "bytes", "name": "assetData", "type": "bytes" } + { + "internalType": "address", + "name": "ownerAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "assetData", + "type": "bytes" + } ], "name": "getTransferableAssetAmount", - "outputs": [{ "internalType": "uint256", "name": "transferableAssetAmount", "type": "uint256" }], + "outputs": [ + { + "internalType": "uint256", + "name": "transferableAssetAmount", + "type": "uint256" + } + ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, - "inputs": [{ "internalType": "bytes", "name": "assetData", "type": "bytes" }], + "inputs": [ + { + "internalType": "bytes", + "name": "assetData", + "type": "bytes" + } + ], "name": "revertIfInvalidAssetData", "outputs": [], "payable": false, @@ -990,10 +2008,10 @@ }, "evm": { "bytecode": { - "object": "0x60806040523480156200001157600080fd5b5060405162005f1338038062005f138339810160408190526200003491620004c6565b600080546001600160a01b0319166001600160a01b03838116919091178083556040517f607041080000000000000000000000000000000000000000000000000000000081528493928392859283929190911690636070410890620000be907ff47261b00000000000000000000000000000000000000000000000000000000090600401620004f6565b60206040518083038186803b158015620000d757600080fd5b505afa158015620000ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620001129190810190620004c6565b600180546001600160a01b0319166001600160a01b039283161790556000546040517f6070410800000000000000000000000000000000000000000000000000000000815291169063607041089062000190907f025717920000000000000000000000000000000000000000000000000000000090600401620004f6565b60206040518083038186803b158015620001a957600080fd5b505afa158015620001be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620001e49190810190620004c6565b600280546001600160a01b0319166001600160a01b039283161790556000546040517f6070410800000000000000000000000000000000000000000000000000000000815291169063607041089062000262907fa7cb5fb70000000000000000000000000000000000000000000000000000000090600401620004f6565b60206040518083038186803b1580156200027b57600080fd5b505afa15801562000290573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620002b69190810190620004c6565b600380546001600160a01b0319166001600160a01b039283161790556000546040517f6070410800000000000000000000000000000000000000000000000000000000815291169063607041089062000334907fc339d10a0000000000000000000000000000000000000000000000000000000090600401620004f6565b60206040518083038186803b1580156200034d57600080fd5b505afa15801562000362573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620003889190810190620004c6565b600480546001600160a01b0319166001600160a01b03928316179055600092508316159050620003b95781620003bb565b305b9050620004406040518060400160405280600b81526020017f30782050726f746f636f6c0000000000000000000000000000000000000000008152506040518060400160405280600581526020017f332e302e3000000000000000000000000000000000000000000000000000000081525085846200046f60201b620035c91760201c565b6005555050600680546001600160a01b0319166001600160a01b03939093169290921790915550620005239050565b8351602094850120835193850193909320604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f815295860194909452928401929092526060830152608082015260a0902090565b600060208284031215620004d8578081fd5b81516001600160a01b0381168114620004ef578182fd5b9392505050565b7fffffffff0000000000000000000000000000000000000000000000000000000091909116815260200190565b6159e080620005336000396000f3fe608060405234801561001057600080fd5b50600436106102e95760003560e01c80639a7e752611610191578063ca49f47c116100e3578063d3d862d111610097578063e4e6e7da11610071578063e4e6e7da14610760578063e77286eb14610781578063ee4f5a94146107a3576102e9565b8063d3d862d11461070b578063d46950281461071e578063e25cabf71461073e576102e9565b8063d001c5dc116100c8578063d001c5dc146106c5578063d186037f146106d8578063d3637905146106eb576102e9565b8063ca49f47c14610681578063cafd3a07146106a4576102e9565b8063a6627e9f11610145578063bbb2dcf61161011f578063bbb2dcf614610636578063bc03f96414610658578063c26cfecd14610679576102e9565b8063a6627e9f146105ed578063acaedc7414610600578063b43cffe114610623576102e9565b8063a070cac811610176578063a070cac8146105a7578063a0901e51146105ba578063a5cd62ba146105cd576102e9565b80639a7e7526146105605780639eadc83514610583576102e9565b806346eb65cb1161024a5780636f83188e116101fe5780637b66ad34116101d85780637b66ad34146105195780637d7275121461053a5780638f4ce4791461054d576102e9565b80636f83188e146104c25780637914b2ec146104e557806379c9c42614610506576102e9565b8063590aa8751161022f578063590aa8751461046d57806363eb39921461048d57806365129042146104a0576102e9565b806346eb65cb146104385780634dfdac201461044d576102e9565b8063314853ff116102a157806332aae3ad1161028657806332aae3ad146103d25780633db6dc61146103f4578063459be5e214610417576102e9565b8063314853ff1461039d578063327d3054146103bf576102e9565b80630d7b7d76116102d25780630d7b7d761461033a578063165979e11461035b5780632322cf761461037d576102e9565b806302d0aec3146102ee57806304a5618a14610318575b600080fd5b6103016102fc3660046149e0565b6107c5565b60405161030f9291906153ec565b60405180910390f35b61032b6103263660046149e0565b610821565b60405161030f939291906154e7565b61034d610348366004614511565b61089c565b60405161030f92919061539a565b61036e6103693660046149e0565b6108be565b60405161030f93929190615622565b61039061038b366004614511565b61091b565b60405161030f9190615357565b6103b06103ab3660046149e0565b610943565b60405161030f939291906153c1565b61034d6103cd3660046149e0565b61098a565b6103e56103e03660046149e0565b6109cc565b60405161030f93929190615598565b6104076104023660046149e0565b610a1f565b60405161030f9493929190615360565b61042a6104253660046149e0565b610a69565b60405161030f92919061560b565b61044b6104463660046149e0565b610abf565b005b61046061045b366004614438565b610bbb565b60405161030f91906152f1565b61048061047b3660046142b1565b610c3e565b60405161030f9190615547565b61048061049b366004614555565b610c95565b6104b36104ae3660046149e0565b610cf2565b60405161030f939291906150bf565b6104d56104d03660046149e0565b610d2c565b60405161030f9493929190615696565b6104f86104f33660046149e0565b6115e1565b60405161030f92919061541e565b610390610514366004614c3f565b611619565b61052c6105273660046149e0565b6116a2565b60405161030f9291906150a5565b610390610548366004614511565b6116da565b6104f861055b3660046149e0565b611cc1565b61057361056e3660046149e0565b611d1e565b60405161030f9493929190615652565b6105966105913660046149e0565b611d7f565b60405161030f959493929190615441565b6103906105b5366004614b3a565b611df7565b6104606105c83660046145d7565b611e78565b6105e06105db36600461463d565b611ef1565b60405161030f919061520b565b6104806105fb3660046145ac565b611fb4565b61061361060e3660046149e0565b61200d565b60405161030f9493929190615167565b610480610631366004614486565b612049565b6106496106443660046149e0565b6120a8565b60405161030f93929190615512565b61066b6106663660046149e0565b612122565b60405161030f9291906153a8565b61039061215b565b61069461068f3660046149e0565b612161565b60405161030f94939291906154a4565b6106b76106b23660046149e0565b6121df565b60405161030f929190615689565b6104606106d3366004614438565b61222d565b6103906106e6366004614511565b61229b565b6106fe6106f9366004614a8b565b612757565b60405161030f919061563d565b6104806107193660046147e5565b612cc5565b61073161072c3660046149e0565b612ce4565b60405161030f9190615409565b61075161074c3660046146c1565b612d94565b60405161030f93929190615256565b61077361076e366004614438565b612ecc565b60405161030f929190615332565b61079461078f366004614ae3565b612ee5565b60405161030f93929190615836565b6107b66107b13660046149e0565b61311f565b60405161030f939291906155e1565b6000806107d9836107d461315c565b613180565b60006107f260048551866131c09092919063ffffffff16565b8060200190516108059190810190614993565b909350905060ff8116600681111561081957fe5b915050915091565b60008080610835848263ffffffff61320316565b92506001600160e01b0319831663012b8bc960e11b146108705760405162461bcd60e51b8152600401610867906157ff565b60405180910390fd5b61088184601063ffffffff61323716565b915061089484602463ffffffff61326a16565b929491935050565b6000806108a984846116da565b91506108b5848461229b565b90509250929050565b60008060006108cf846107d4613276565b60006108e860048651876131c09092919063ffffffff16565b8060200190516108fb9190810190614e1e565b9094509250905060ff8116600281111561091157fe5b9350509193909250565b600080600061092a858561089c565b91509150610938828261329a565b925050505b92915050565b6000606080610954846107d46132b0565b835161096a90859060049063ffffffff6131c016565b80602001905161097d9190810190614933565b9196909550909350915050565b600080610999836107d46132d4565b82516109af90849060049063ffffffff6131c016565b8060200190516109c291908101906148d5565b9094909350915050565b60008060606109dd846107d46132f8565b60006109f660048651876131c09092919063ffffffff16565b806020019051610a099190810190614dd2565b9094509250905060ff8116600181111561091157fe5b600080606080610a31856107d461331c565b8451610a4790869060049063ffffffff6131c016565b806020019051610a5a9190810190614891565b92989197509550909350915050565b600080610a78836107d4613340565b6000610a9160048551866131c09092919063ffffffff16565b806020019051610aa49190810190614d10565b9250905060ff81166003811115610ab757fe5b925050915091565b6000610ad1828263ffffffff61320316565b90506001600160e01b03198116630f47261b60e41b1415610afc57610af582611cc1565b5050610bb7565b6001600160e01b0319811663012b8bc960e11b1415610b2657610b1e82610821565b505050610bb7565b6001600160e01b0319811663a7cb5fb760e01b1415610b5257610b4882611d7f565b5050505050610bb7565b6001600160e01b031981166394cfcdd760e01b1415610b7457610b1e826120a8565b6001600160e01b0319811663619ce88560e11b1415610b9f57610b9682612161565b50505050610bb7565b60405162461bcd60e51b8152600401610867906157ff565b5050565b606060008251905080604051908082528060200260200182016040528015610bed578160200160208202803883390190505b50915060005b818114610c3657610c1785858381518110610c0a57fe5b602002602001015161229b565b838281518110610c2357fe5b6020908102919091010152600101610bf3565b505092915050565b604051606090630f47261b60e41b90610c5b908490602401615091565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915290505b919050565b60405160609063619ce88560e11b90610cb690869086908690602401615135565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915290505b9392505050565b6000806000610d03846107d4613364565b8351610d1990859060049063ffffffff6131c016565b80602001905161097d9190810190614306565b60608080806000610d43868263ffffffff61320316565b90506001600160e01b0319811663dedfc1f160e01b1415610d9b576040518060400160405280601181526020017f626174636843616e63656c4f726465727300000000000000000000000000000081525094506111e3565b6001600160e01b03198116634b4a520160e11b1415610df1576040518060400160405280600f81526020017f626174636846696c6c4f7264657273000000000000000000000000000000000081525094506111e3565b6001600160e01b031981166323aa37f960e21b1415610e47576040518060400160405280601681526020017f626174636846696c6c4f72646572734e6f5468726f770000000000000000000081525094506111e3565b6001600160e01b03198116632fbb8b8560e21b1415610e9d576040518060400160405280601581526020017f626174636846696c6c4f724b696c6c4f7264657273000000000000000000000081525094506111e3565b6001600160e01b03198116632da6298760e01b1415610ef3576040518060400160405280600b81526020017f63616e63656c4f7264657200000000000000000000000000000000000000000081525094506111e3565b6001600160e01b03198116634da26aab60e11b1415610f49576040518060400160405280600981526020017f66696c6c4f72646572000000000000000000000000000000000000000000000081525094506111e3565b6001600160e01b03198116633852d63160e21b1415610f9f576040518060400160405280600f81526020017f66696c6c4f724b696c6c4f72646572000000000000000000000000000000000081525094506111e3565b6001600160e01b031981166378d29ac160e01b1415610ff5576040518060400160405280601681526020017f6d61726b65744275794f72646572734e6f5468726f770000000000000000000081525094506111e3565b6001600160e01b0319811663369da09960e01b141561104b576040518060400160405280601781526020017f6d61726b657453656c6c4f72646572734e6f5468726f7700000000000000000081525094506111e3565b6001600160e01b03198116638bc8efb360e01b14156110a1576040518060400160405280601981526020017f6d61726b65744275794f726465727346696c6c4f724b696c6c0000000000000081525094506111e3565b6001600160e01b0319811663a6c3bf3360e01b14156110f7576040518060400160405280601a81526020017f6d61726b657453656c6c4f726465727346696c6c4f724b696c6c00000000000081525094506111e3565b6001600160e01b031981166388ec79fb60e01b141561114d576040518060400160405280600b81526020017f6d617463684f726465727300000000000000000000000000000000000000000081525094506111e3565b6001600160e01b031981167f4f9559b10000000000000000000000000000000000000000000000000000000014806111ae57506001600160e01b031981167f2280c91000000000000000000000000000000000000000000000000000000000145b156111cb5760405162461bcd60e51b815260040161086790615791565b60405162461bcd60e51b81526004016108679061575a565b6001600160e01b0319811663dedfc1f160e01b141561126f57855161121290879060049063ffffffff61338816565b806020019051611225919081019061460a565b604080516000808252602082019092529195505b5060408051600080825260208201909252919450611267565b60608152602001906001900390816112525790505b5091506115d9565b6001600160e01b03198116632fbb8b8560e21b148061129e57506001600160e01b03198116634b4a520160e11b145b806112b957506001600160e01b031981166323aa37f960e21b145b156112d3576112c786613408565b919550935091506115d9565b6001600160e01b03198116632da6298760e01b14156113a25760408051600180825281830190925290816020015b611309613be4565b815260200190600190039081611301575050865190945061133490879060049063ffffffff61338816565b8060200190516113479190810190614a58565b8460008151811061135457fe5b60200260200101819052506000604051908082528060200260200182016040528015611239578160200160208202803883390190505060408051600080825260208201909252919450611267565b6001600160e01b03198116633852d63160e21b14806113d157506001600160e01b03198116634da26aab60e11b145b156113df576112c786613437565b6001600160e01b031981166378d29ac160e01b148061140e57506001600160e01b0319811663369da09960e01b145b8061142957506001600160e01b03198116638bc8efb360e01b145b8061144457506001600160e01b0319811663a6c3bf3360e01b145b15611452576112c786613531565b6001600160e01b031981166388ec79fb60e01b14156115d957611473613be4565b61147b613be4565b60608061149560048b518c6133889092919063ffffffff16565b8060200190516114a89190810190614b93565b604080516002808252606082019092529498509296509094509250816020015b6114d0613be4565b8152602001906001900390816114c857905050975083886000815181106114f357fe5b6020026020010181905250828860018151811061150c57fe5b602090810291909101015260408051600280825260608201909252908160200160208202803883390190505096508360a001518760008151811061154c57fe5b6020026020010181815250508260a001518760018151811061156a57fe5b60209081029190910101526040805160028082526060820190925290816020015b606081526020019060019003908161158b57905050955081866000815181106115b057fe5b602002602001018190525080866001815181106115c957fe5b6020026020010181905250505050505b509193509193565b6000806115f0836107d46135a5565b825161160690849060049063ffffffff6131c016565b8060200190516109c291908101906149b7565b600061169a846116956040518060400160405280600b81526020017f30782050726f746f636f6c0000000000000000000000000000000000000000008152506040518060400160405280600581526020017f332e302e3000000000000000000000000000000000000000000000000000000081525087876135c9565b613620565b949350505050565b6000806116b1836107d4613634565b82516116c790849060049063ffffffff6131c016565b8060200190516109c291908101906142cd565b6000806116ed838263ffffffff61320316565b90506001600160e01b03198116630f47261b60e41b141561181f57600061171b84601063ffffffff61323716565b6040519091506060907f70a082310000000000000000000000000000000000000000000000000000000090611754908890602401615091565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060836001600160a01b0316836040516117a59190615075565b600060405180830381855afa9150503d80600081146117e0576040519150601f19603f3d011682016040523d82523d6000602084013e6117e5565b606091505b50915091508180156117f8575080516020145b611803576000611814565b61181481600063ffffffff61326a16565b955050505050611cba565b6001600160e01b0319811663012b8bc960e11b14156119775760008061184485610821565b6040519194509250606091507f6352211e0000000000000000000000000000000000000000000000000000000090611880908490602401615357565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060846001600160a01b0316836040516118d19190615075565b600060405180830381855afa9150503d806000811461190c576040519150601f19603f3d011682016040523d82523d6000602084013e611911565b606091505b50915091506000828015611926575081516020145b611931576000611942565b61194282600c63ffffffff61323716565b9050896001600160a01b0316816001600160a01b031614611964576000611967565b60015b60ff169750505050505050611cba565b6001600160e01b0319811663a7cb5fb760e01b1415611b1757600060608061199e86611d7f565b5081519296509094509250905060005b818114611b0d5783516060907efdd58e00000000000000000000000000000000000000000000000000000000908b908790859081106119e957fe5b6020026020010151604051602401611a0292919061519b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060876001600160a01b031683604051611a539190615075565b600060405180830381855afa9150503d8060008114611a8e576040519150601f19603f3d011682016040523d82523d6000602084013e611a93565b606091505b50915091506000828015611aa8575081516020145b611ab3576000611ac4565b611ac482600063ffffffff61326a16565b90506000878681518110611ad457fe5b60200260200101518281611ae457fe5b0490508b811080611af357508b155b15611afc57809b505b5050600190930192506119ae915050565b5050505050611cba565b6001600160e01b0319811663619ce88560e11b1415611c1c576040516060907fa85e59e40000000000000000000000000000000000000000000000000000000090611b6d9086906000908190819060240161555a565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925260045491519092506000916001600160a01b031690611bbf908490615075565b600060405180830381855afa9150503d8060008114611bfa576040519150601f19603f3d011682016040523d82523d6000602084013e611bff565b606091505b5050905080611c0f576000611c13565b6000195b93505050611cba565b6001600160e01b031981166394cfcdd760e01b1415611cba57606080611c41856120a8565b80519194509250905060005b818114611cb5576000611c7389858481518110611c6657fe5b60200260200101516116da565b90506000858381518110611c8357fe5b60200260200101518281611c9357fe5b04905087811080611ca2575087155b15611cab578097505b5050600101611c4d565b505050505b5092915050565b600080611cd4838263ffffffff61320316565b91506001600160e01b03198216630f47261b60e41b14611d065760405162461bcd60e51b8152600401610867906157ff565b611d1783601063ffffffff61323716565b9050915091565b60008060006060611d31856107d4613658565b6000611d4a60048751886131c09092919063ffffffff16565b806020019051611d5d9190810190614d74565b91965094509250905060ff81166006811115611d7557fe5b9450509193509193565b60008060608080611d96868563ffffffff61320316565b94506001600160e01b0319851663a7cb5fb760e01b14611dc85760405162461bcd60e51b8152600401610867906157ff565b505050506024828101516044840151606485015160848601519496929591820184019490820184019391010190565b600061169a84611e736040518060400160405280600b81526020017f30782050726f746f636f6c0000000000000000000000000000000000000000008152506040518060400160405280600581526020017f332e302e3000000000000000000000000000000000000000000000000000000081525087876135c9565b61367c565b6060808251604051908082528060200260200182016040528015611ea6578160200160208202803883390190505b50905060005b83518114611cba57838181518110611ec057fe5b60200260200101516001600160a01b031631828281518110611ede57fe5b6020908102919091010152600101611eac565b606060008451905080604051908082528060200260200182016040528015611f23578160200160208202803883390190505b50915060005b818114611fab57611f74868281518110611f3f57fe5b6020026020010151868381518110611f5357fe5b6020026020010151868481518110611f6757fe5b6020026020010151612757565b838281518110611f8057fe5b60200260200101906004811115611f9357fe5b90816004811115611fa057fe5b905250600101611f29565b50509392505050565b60405160609063012b8bc960e11b90611fd3908590859060240161519b565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905092915050565b60006060806060612020856107d461368b565b845161203690869060049063ffffffff6131c016565b806020019051610a5a91908101906143a0565b60405160609063a7cb5fb760e01b9061206c9087908790879087906024016150e3565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050949350505050565b60006060806120bd848463ffffffff61320316565b92506001600160e01b031983166394cfcdd760e01b146120ef5760405162461bcd60e51b8152600401610867906157ff565b835161210590859060049063ffffffff61338816565b806020019051612118919081019061481a565b9395909450915050565b60006060612132836107d46136af565b825161214890849060049063ffffffff6131c016565b8060200190516109c291908101906148f8565b60055481565b600080606081612177858263ffffffff61320316565b93506001600160e01b0319841663619ce88560e11b146121a95760405162461bcd60e51b8152600401610867906157ff565b84516121bf90869060049063ffffffff61338816565b8060200190516121d29190810190614348565b9597919650949350915050565b6000806121ee836107d46136d3565b600061220760048551866131c09092919063ffffffff16565b80602001905161221a9190810190614d10565b9250905060ff81166001811115610ab757fe5b60606000825190508060405190808252806020026020018201604052801561225f578160200160208202803883390190505b50915060005b818114610c365761227c85858381518110611c6657fe5b83828151811061228857fe5b6020908102919091010152600101612265565b6000806122ae838263ffffffff61320316565b90506001600160e01b031981166394cfcdd760e01b1415612347576060806122d5856120a8565b80519194509250905060005b81811461233c5760006122fa89858481518110610c0a57fe5b9050600085838151811061230a57fe5b6020026020010151828161231a57fe5b04905087811080612329575087155b15612332578097505b50506001016122e1565b5061093d9350505050565b6001600160e01b03198116630f47261b60e41b14156123b957600061237384601063ffffffff61323716565b6001546040519192506060917fdd62ed3e00000000000000000000000000000000000000000000000000000000916117549189916001600160a01b0316906024016150a5565b6001600160e01b0319811663012b8bc960e11b1415612605576000806123de85610821565b6002546040519295509093506060925063e985e9c560e01b91612411918a916001600160a01b03909116906024016150a5565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060846001600160a01b0316836040516124629190615075565b600060405180830381855afa9150503d806000811461249d576040519150601f19603f3d011682016040523d82523d6000602084013e6124a2565b606091505b50915091508115806124b657508051602014155b806124d257506124cd81600063ffffffff61326a16565b600114155b156125f6576040516060907f081812fc000000000000000000000000000000000000000000000000000000009061250d908790602401615357565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050856001600160a01b03168160405161255a9190615075565b600060405180830381855afa9150503d8060008114612595576040519150601f19603f3d011682016040523d82523d6000602084013e61259a565b606091505b5090935091508280156125ae575081516020145b80156125dd57506002546001600160a01b03166125d283600c63ffffffff61323716565b6001600160a01b0316145b6125e85760006125eb565b60015b60ff16975050611b0d565b60001996505050505050611cba565b6001600160e01b0319811663a7cb5fb760e01b141561273357600061262984611d7f565b50506003546040519294506060935063e985e9c560e01b9261265a925089916001600160a01b0316906024016150a5565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060836001600160a01b0316836040516126ab9190615075565b600060405180830381855afa9150503d80600081146126e6576040519150601f19603f3d011682016040523d82523d6000602084013e6126eb565b606091505b50915091508180156126fe575080516020145b801561271a575061271681600063ffffffff61326a16565b6001145b612725576000611814565b600019955050505050611cba565b6001600160e01b0319811663619ce88560e11b1415611cba57506000199392505050565b6000612761613c77565b6127f28584600660009054906101000a90046001600160a01b03166001600160a01b0316631ce4c78b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156127b457600080fd5b505afa1580156127c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506127ec9190810190614cf8565b3a6136f7565b60408051600480825260a0820190925291925060609190816020015b606081526020019060019003908161280e57505060408051600480825260a082019092529192506060919060208201608080388339505060408051600480825260a08201909252929350606092915060208201608080388339505060408051600480825260a08201909252929350606092915060208201608080388339019050509050886101600151846000815181106128a457fe5b602002602001018190525087836000815181106128bd57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508860000151826000815181106128ef57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050868160008151811061291d57fe5b6020026020010181815250508861014001518460018151811061293c57fe5b602002602001018190525088600001518360018151811061295957fe5b60200260200101906001600160a01b031690816001600160a01b031681525050878260018151811061298757fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508460000151816001815181106129b957fe5b602002602001018181525050886101a00151846002815181106129d857fe5b602002602001018190525087836002815181106129f157fe5b60200260200101906001600160a01b031690816001600160a01b031681525050886040015182600281518110612a2357fe5b60200260200101906001600160a01b031690816001600160a01b031681525050846060015181600281518110612a5557fe5b60200260200101818152505088610180015184600381518110612a7457fe5b6020026020010181905250886000015183600381518110612a9157fe5b60200260200101906001600160a01b031690816001600160a01b031681525050886040015182600381518110612ac357fe5b60200260200101906001600160a01b031690816001600160a01b031681525050846040015181600381518110612af557fe5b60209081029190910101526040516060907fb04fbddd0000000000000000000000000000000000000000000000000000000090612b3c9087908790879087906024016151b4565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925260065491519092506060916001600160a01b031690612b8e908490615075565b6000604051808303816000865af19150503d8060008114612bcb576040519150601f19603f3d011682016040523d82523d6000602084013e612bd0565b606091505b50915060009050612be7828263ffffffff61320316565b9050612bf16132f8565b6001600160e01b031982811691161415612c33576000612c10836109cc565b5091505060ff81166004811115612c2357fe5b9950505050505050505050610ceb565b612c3b6132b0565b6001600160e01b031982811691161415612c6e576000612c5a83610943565b509091505060ff81166004811115612c2357fe5b815160208301207ff43f26ea5a94b478394a975e856464913dc1a8a1ca70939d974aa7c238aa0ce01415612cad57600498505050505050505050610ceb565b60405162461bcd60e51b815260040161086790615723565b6040516060906394cfcdd760e01b90611fd39085908590602401615304565b6000612cf6828263ffffffff61320316565b90506001600160e01b03198116630f47261b60e41b1480612d2757506001600160e01b0319811663012b8bc960e11b145b80612d4257506001600160e01b0319811663a7cb5fb760e01b145b80612d5d57506001600160e01b031981166394cfcdd760e01b145b80612d7857506001600160e01b0319811663619ce88560e11b145b610c905760405162461bcd60e51b8152600401610867906157ff565b606080606060008551905080604051908082528060200260200182016040528015612dd957816020015b612dc6613ca6565b815260200190600190039081612dbe5790505b50935080604051908082528060200260200182016040528015612e06578160200160208202803883390190505b50925080604051908082528060200260200182016040528015612e33578160200160208202803883390190505b50915060005b818114612ec357612e70878281518110612e4f57fe5b6020026020010151878381518110612e6357fe5b6020026020010151612ee5565b8751889085908110612e7e57fe5b60200260200101878581518110612e9157fe5b60200260200101878681518110612ea457fe5b9315156020948502919091019093019290925291905252600101612e39565b50509250925092565b606080612ed9848461222d565b91506108b58484610bbb565b612eed613ca6565b600080546040517f9d3fa4b900000000000000000000000000000000000000000000000000000000815282916001600160a01b031690639d3fa4b990612f3790889060040161585a565b60606040518083038186803b158015612f4f57600080fd5b505afa158015612f63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612f879190810190614a13565b85516000546040517fa12dcc6f00000000000000000000000000000000000000000000000000000000815292955090916001600160a01b039091169063a12dcc6f90612fd9908990899060040161586d565b60206040518083038186803b158015612ff157600080fd5b505afa158015613005573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506130299190810190614871565b9150600061303c8288610140015161091b565b60a088015160c08901516101808a01516101408b01519394509192909160009161306b9163ffffffff61376e16565b15613098576130918461308b848d6080015161379390919063ffffffff16565b856137af565b90506130f1565b816130ac57613091848b60800151856137af565b60006130bd868c610180015161091b565b905060006130d0868d60800151876137af565b905060006130df8386886137af565b90506130eb828261329a565b93505050505b61311161310b8960400151856137d190919063ffffffff16565b8261329a565b965050505050509250925092565b6000806000613130846107d46137f0565b600061314960048651876131c09092919063ffffffff16565b8060200190516108fb9190810190614d3d565b7ffdb6ca8d0000000000000000000000000000000000000000000000000000000090565b600061318d836000613203565b90506001600160e01b0319808216908316146131bb5760405162461bcd60e51b8152600401610867906157c8565b505050565b6060818311156131de576131de6131d960008585613814565b613833565b83518211156131f7576131f76131d96001848751613814565b50819003910190815290565b60008160040183511015613224576132246131d96003855185600401613814565b5001602001516001600160e01b03191690565b60008160140183511015613258576132586131d96004855185601401613814565b5001601401516001600160a01b031690565b6000610ceb838361383b565b7f18e4b1410000000000000000000000000000000000000000000000000000000090565b60008183106132a95781610ceb565b5090919050565b7f4678472b0000000000000000000000000000000000000000000000000000000090565b7fb6555d6f0000000000000000000000000000000000000000000000000000000090565b7f488219a60000000000000000000000000000000000000000000000000000000090565b7f1b8388f70000000000000000000000000000000000000000000000000000000090565b7fe94a7ed00000000000000000000000000000000000000000000000000000000090565b7f4ad312750000000000000000000000000000000000000000000000000000000090565b6060818311156133a1576133a16131d960008585613814565b83518211156133ba576133ba6131d96001848751613814565b8282036040519080825280601f01601f1916602001820160405280156133e7576020820181803883390190505b509050610ceb6133f682613865565b8461340087613865565b01835161386b565b606080606061342460048551866133889092919063ffffffff16565b80602001905161097d9190810190614718565b60408051600180825281830190925260609182918291816020015b61345a613be4565b8152602001906001900390816134525750506040805160018082528183019092529194506020808301908038833901905050604080516001808252818301909252919350816020015b60608152602001906001900390816134a357505084519091506134d090859060049063ffffffff61338816565b8060200190516134e39190810190614bec565b856000815181106134f057fe5b602002602001018560008151811061350457fe5b602002602001018560008151811061351857fe5b6020908102919091010192909252919052529193909250565b60408051600180825281830190925260609182918291602080830190803883395050855191935061356d9186915060049063ffffffff61338816565b8060200190516135809190810190614792565b8451859060009061358d57fe5b60209081029190910101919091529095929450925050565b7f11c7b7200000000000000000000000000000000000000000000000000000000090565b8351602094850120835193850193909320604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f815295860194909452928401929092526060830152608082015260a0902090565b6000610ceb8261362f85613910565b61398b565b7fa15c0d060000000000000000000000000000000000000000000000000000000090565b7f7e5a23180000000000000000000000000000000000000000000000000000000090565b6000610ceb8261362f856139c5565b7f5bd0428d0000000000000000000000000000000000000000000000000000000090565b7f20d11f610000000000000000000000000000000000000000000000000000000090565b7ff59851840000000000000000000000000000000000000000000000000000000090565b6136ff613c77565b6020810184905260a0850151608086015161371b918691613a7e565b815260a085015160c0860151613732918691613a7e565b604082015260a085015160e086015161374c918691613a7e565b6060820152613761828463ffffffff613ab216565b6080820152949350505050565b600081518351148015610ceb5750508051602091820120825192909101919091201490565b600082820183811015610ceb57610ceb6131d960008686613adf565b600061169a836137c5868563ffffffff613ab216565b9063ffffffff613afe16565b6000828211156137ea576137ea6131d960028585613adf565b50900390565b7fe53c76c80000000000000000000000000000000000000000000000000000000090565b6060632800659560e01b848484604051602401610cb69392919061562f565b805160208201fd5b6000816020018351101561385c5761385c6131d96005855185602001613814565b50016020015190565b60200190565b6020811015613895576001816020036101000a0380198351168185511680821786525050506131bb565b828214156138a2576131bb565b828211156138dc5760208103905080820181840181515b828510156138d45784518652602095860195909401936138b9565b9052506131bb565b60208103905080820181840183515b818612156139075782518252601f1992830192909101906138eb565b85525050505050565b608081810151825160208085015160408087015160609788015186519685019690962082517fec69816980a3a3ca4554410e60253953e9ff375ba4536a98adfa15cc7154150881529485019590955290830191909152948101949094526001600160a01b039091169183019190915260a082015260c0902090565b6040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6101408101516101608201516101808301516101a08401516000937ff80322eb8376aafb64eadf8f0d7623f22130fd9491a221e902b713cb984a753493909290916020871015613a1157fe5b601f1987018051610140890180516101608b0180516101808d0180516101a08f0180519d89528c5160209d8e012087528b519b8d019b909b2084528951998c01999099208152875197909a019690962088526101e085209390945290529190529252919091529050919050565b6000613a8b848484613b28565b15613a9e57613a9e6131d9858585613b8e565b61169a836137c5868563ffffffff613ab216565b600082613ac15750600061093d565b82820282848281613ace57fe5b0414610ceb57610ceb6131d9600186865b606063e946c1bb60e01b848484604051602401610cb6939291906155c0565b600081613b1457613b146131d960038585613adf565b6000828481613b1f57fe5b04949350505050565b600082613b3a57613b3a6131d9613bad565b811580613b45575083155b15613b5257506000610ceb565b60008380613b5c57fe5b8584099050613b71858463ffffffff613ab216565b613b83826103e863ffffffff613ab216565b101595945050505050565b606063339f3de260e01b848484604051602401610cb693929190615892565b60408051808201909152600481527fa791837c00000000000000000000000000000000000000000000000000000000602082015290565b604051806101c0016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001606081525090565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b803561093d81615979565b805161093d81615979565b600082601f830112613cec578081fd5b8135613cff613cfa826158cf565b6158a8565b818152915060208083019084810181840286018201871015613d2057600080fd5b60005b84811015611cb5578135613d3681615979565b84529282019290820190600101613d23565b600082601f830112613d58578081fd5b8151613d66613cfa826158cf565b8181529150602080830190840160005b83811015613da357613d8e8760208451890101613fc8565b83526020928301929190910190600101613d76565b5050505092915050565b600082601f830112613dbd578081fd5b8135613dcb613cfa826158cf565b8181529150602080830190840160005b83811015613da357613df38760208435890101613f7a565b83526020928301929190910190600101613ddb565b600082601f830112613e18578081fd5b8151613e26613cfa826158cf565b8181529150602080830190840160005b83811015613da357613e4e876020845189010161415d565b83526020928301929190910190600101613e36565b600082601f830112613e73578081fd5b8135613e81613cfa826158cf565b8181529150602080830190840160005b83811015613da357613ea9876020843589010161400e565b83526020928301929190910190600101613e91565b600082601f830112613ece578081fd5b8151613edc613cfa826158cf565b818152915060208083019084810181840286018201871015613efd57600080fd5b60005b84811015611cb557815184529282019290820190600101613f00565b600082601f830112613f2c578081fd5b8135613f3a613cfa826158cf565b818152915060208083019084810181840286018201871015613f5b57600080fd5b60005b84811015611cb557813584529282019290820190600101613f5e565b600082601f830112613f8a578081fd5b8135613f98613cfa826158ef565b9150808252836020828501011115613faf57600080fd5b8060208401602084013760009082016020015292915050565b600082601f830112613fd8578081fd5b8151613fe6613cfa826158ef565b9150808252836020828501011115613ffd57600080fd5b611cba81602084016020860161591e565b60006101c0808385031215614021578182fd5b61402a816158a8565b9150506140378383613cc6565b81526140468360208401613cc6565b60208201526140588360408401613cc6565b604082015261406a8360608401613cc6565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e08201526101008083013581830152506101208083013581830152506101408083013567ffffffffffffffff808211156140cc57600080fd5b6140d886838701613f7a565b838501526101609250828501359150808211156140f457600080fd5b61410086838701613f7a565b8385015261018092508285013591508082111561411c57600080fd5b61412886838701613f7a565b838501526101a092508285013591508082111561414457600080fd5b5061415185828601613f7a565b82840152505092915050565b60006101c0808385031215614170578182fd5b614179816158a8565b9150506141868383613cd1565b81526141958360208401613cd1565b60208201526141a78360408401613cd1565b60408201526141b98360608401613cd1565b60608201526080820151608082015260a082015160a082015260c082015160c082015260e082015160e08201526101008083015181830152506101208083015181830152506101408083015167ffffffffffffffff8082111561421b57600080fd5b61422786838701613fc8565b8385015261016092508285015191508082111561424357600080fd5b61424f86838701613fc8565b8385015261018092508285015191508082111561426b57600080fd5b61427786838701613fc8565b838501526101a092508285015191508082111561429357600080fd5b5061415185828601613fc8565b805160ff8116811461093d57600080fd5b6000602082840312156142c2578081fd5b8135610ceb81615979565b600080604083850312156142df578081fd5b82516142ea81615979565b60208401519092506142fb81615979565b809150509250929050565b60008060006060848603121561431a578081fd5b835161432581615979565b602085015190935061433681615979565b80925050604084015190509250925092565b60008060006060848603121561435c578081fd5b835161436781615979565b602085015190935067ffffffffffffffff811115614383578182fd5b61438f86828701613fc8565b925050604084015190509250925092565b600080600080608085870312156143b5578182fd5b84516143c081615979565b602086015190945067ffffffffffffffff808211156143dd578384fd5b6143e988838901613fc8565b945060408701519150808211156143fe578384fd5b61440a88838901613fc8565b9350606087015191508082111561441f578283fd5b5061442c87828801613fc8565b91505092959194509250565b6000806040838503121561444a578182fd5b823561445581615979565b9150602083013567ffffffffffffffff811115614470578182fd5b61447c85828601613dad565b9150509250929050565b6000806000806080858703121561449b578182fd5b84356144a681615979565b9350602085013567ffffffffffffffff808211156144c2578384fd5b6144ce88838901613f1c565b945060408701359150808211156144e3578384fd5b6144ef88838901613f1c565b93506060870135915080821115614504578283fd5b5061442c87828801613f7a565b60008060408385031215614523578182fd5b823561452e81615979565b9150602083013567ffffffffffffffff811115614549578182fd5b61447c85828601613f7a565b600080600060608486031215614569578081fd5b833561457481615979565b9250602084013567ffffffffffffffff81111561458f578182fd5b61459b86828701613f7a565b925050604084013590509250925092565b600080604083850312156145be578182fd5b82356145c981615979565b946020939093013593505050565b6000602082840312156145e8578081fd5b813567ffffffffffffffff8111156145fe578182fd5b61169a84828501613cdc565b60006020828403121561461b578081fd5b815167ffffffffffffffff811115614631578182fd5b61169a84828501613e08565b600080600060608486031215614651578081fd5b833567ffffffffffffffff80821115614668578283fd5b61467487838801613e63565b94506020860135915080821115614689578283fd5b61469587838801613cdc565b935060408601359150808211156146aa578283fd5b506146b786828701613f1c565b9150509250925092565b600080604083850312156146d3578182fd5b823567ffffffffffffffff808211156146ea578384fd5b6146f686838701613e63565b9350602085013591508082111561470b578283fd5b5061447c85828601613dad565b60008060006060848603121561472c578081fd5b835167ffffffffffffffff80821115614743578283fd5b61474f87838801613e08565b94506020860151915080821115614764578283fd5b61477087838801613ebe565b93506040860151915080821115614785578283fd5b506146b786828701613d48565b6000806000606084860312156147a6578081fd5b835167ffffffffffffffff808211156147bd578283fd5b6147c987838801613e08565b9450602086015193506040860151915080821115614785578283fd5b600080604083850312156147f7578182fd5b823567ffffffffffffffff8082111561480e578384fd5b6146f686838701613f1c565b6000806040838503121561482c578182fd5b825167ffffffffffffffff80821115614843578384fd5b61484f86838701613ebe565b93506020850151915080821115614864578283fd5b5061447c85828601613d48565b600060208284031215614882578081fd5b81518015158114610ceb578182fd5b600080600080608085870312156148a6578182fd5b8451935060208501516148b881615979565b604086015190935067ffffffffffffffff808211156143fe578384fd5b600080604083850312156148e7578182fd5b505080516020909101519092909150565b6000806040838503121561490a578182fd5b82519150602083015167ffffffffffffffff811115614927578182fd5b61447c85828601613fc8565b600080600060608486031215614947578081fd5b83519250602084015167ffffffffffffffff80821115614965578283fd5b61497187838801613fc8565b93506040860151915080821115614986578283fd5b506146b786828701613fc8565b600080604083850312156149a5578182fd5b8251915060208301516142fb8161598e565b600080604083850312156149c9578182fd5b82516001600160e01b0319811681146142ea578283fd5b6000602082840312156149f1578081fd5b813567ffffffffffffffff811115614a07578182fd5b61169a84828501613f7a565b600060608284031215614a24578081fd5b614a2e60606158a8565b614a3884846142a0565b815260208301516020820152604083015160408201528091505092915050565b600060208284031215614a69578081fd5b815167ffffffffffffffff811115614a7f578182fd5b61169a8482850161415d565b600080600060608486031215614a9f578081fd5b833567ffffffffffffffff811115614ab5578182fd5b614ac18682870161400e565b9350506020840135614ad281615979565b929592945050506040919091013590565b60008060408385031215614af5578182fd5b823567ffffffffffffffff80821115614b0c578384fd5b614b188683870161400e565b93506020850135915080821115614b2d578283fd5b5061447c85828601613f7a565b600080600060608486031215614b4e578081fd5b833567ffffffffffffffff811115614b64578182fd5b614b708682870161400e565b935050602084013591506040840135614b8881615979565b809150509250925092565b60008060008060808587031215614ba8578182fd5b845167ffffffffffffffff80821115614bbf578384fd5b614bcb8883890161415d565b95506020870151915080821115614be0578384fd5b6143e98883890161415d565b600080600060608486031215614c00578081fd5b835167ffffffffffffffff80821115614c17578283fd5b614c238783880161415d565b9450602086015193506040860151915080821115614986578283fd5b600080600060608486031215614c53578081fd5b833567ffffffffffffffff80821115614c6a578283fd5b81860160a08189031215614c7c578384fd5b614c8660a06158a8565b92508035835260208101356020840152604081013560408401526060810135614cae81615979565b6060840152608081013582811115614cc4578485fd5b614cd089828401613f7a565b608085015250919450505060208401359150614cef8560408601613cc6565b90509250925092565b600060208284031215614d09578081fd5b5051919050565b60008060408385031215614d22578182fd5b8251614d2d8161598e565b6020939093015192949293505050565b600080600060608486031215614d51578081fd5b8351614d5c8161598e565b602085015160408601519194509250614b8881615979565b60008060008060808587031215614d89578182fd5b614d9386866142a0565b9350602085015192506040850151614daa81615979565b606086015190925067ffffffffffffffff811115614dc6578182fd5b61442c87828801613fc8565b600080600060608486031215614de6578081fd5b614df085856142a0565b925060208401519150604084015167ffffffffffffffff811115614e12578182fd5b6146b786828701613fc8565b600080600060608486031215614e32578081fd5b614e3c85856142a0565b925060208401519150604084015190509250925092565b6001600160a01b03169052565b6000815180845260208401935060208301825b82811015614e9a5781516001600160a01b0316865260209586019590910190600101614e73565b5093949350505050565b600081518084526020840180819550602083028101915060208501845b84811015614eef578284038852614ed9848351614f2c565b6020988901989094509190910190600101614ec1565b50919695505050505050565b6000815180845260208401935060208301825b82811015614e9a578151865260209586019590910190600101614f0e565b60008151808452614f4481602086016020860161591e565b601f01601f19169290920160200192915050565b805160ff16825260208082015190830152604090810151910152565b60006101c0614f84848451614e53565b6020830151614f966020860182614e53565b506040830151614fa96040860182614e53565b506060830151614fbc6060860182614e53565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e085015261010080840151818601525061012080840151818601525061014080840151828287015261501583870182614f2c565b915050610160915081840151858203838701526150328282614f2c565b92505050610180808401518583038287015261504e8382614f2c565b9150506101a09150818401518582038387015261506b8282614f2c565b9695505050505050565b6000825161508781846020870161591e565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60006001600160a01b0386168252608060208301526151056080830186614efb565b82810360408401526151178186614efb565b83810360608501526151298186614f2c565b98975050505050505050565b60006001600160a01b0385168252606060208301526151576060830185614f2c565b9050826040830152949350505050565b60006001600160a01b0386168252608060208301526151896080830186614f2c565b82810360408401526151178186614f2c565b6001600160a01b03929092168252602082015260400190565b6000608082526151c76080830187614ea4565b82810360208401526151d98187614e60565b83810360408501526151eb8187614e60565b91505082810360608401526152008185614efb565b979650505050505050565b602080825282518282018190526000918401906040840190835b8181101561524b576152378451615913565b835260209384019390920191600101615225565b509095945050505050565b606080825284519082018190526000906020906080840190828801845b8281101561529957615286848351614f58565b6060939093019290840190600101615273565b505050838103828501526152ad8187614efb565b84810360408601528551808252908301915082860190845b818110156152e35782511515845292840192918401916001016152c5565b509198975050505050505050565b600060208252610ceb6020830184614efb565b6000604082526153176040830185614efb565b82810360208401526153298185614ea4565b95945050505050565b6000604082526153456040830185614efb565b82810360208401526153298185614efb565b90815260200190565b60008582526001600160a01b0385166020830152608060408301526153886080830185614f2c565b82810360608401526152008185614f2c565b918252602082015260400190565b60008382526040602083015261169a6040830184614f2c565b6000848252606060208301526153da6060830185614f2c565b828103604084015261506b8185614f2c565b828152604081016153fc8361596f565b8260208301529392505050565b6001600160e01b031991909116815260200190565b6001600160e01b03199290921682526001600160a01b0316602082015260400190565b60006001600160e01b0319871682526001600160a01b038616602083015260a0604083015261547360a0830186614efb565b82810360608401526154858186614efb565b83810360808501526154978186614f2c565b9998505050505050505050565b60006001600160e01b0319861682526001600160a01b0385166020830152608060408301526154d66080830185614f2c565b905082606083015295945050505050565b6001600160e01b03199390931683526001600160a01b03919091166020830152604082015260600190565b60006001600160e01b031985168252606060208301526155356060830185614efb565b828103604084015261506b8185614ea4565b600060208252610ceb6020830184614f2c565b60006080825261556d6080830187614f2c565b6001600160a01b03958616602084015293909416604082015260ff9190911660609091015292915050565b60006155a38561594e565b848252836020830152606060408301526153296060830184614f2c565b606081016155cd8561595b565b938152602081019290925260409091015290565b606081016155ee85615965565b93815260208101929092526001600160a01b031660409091015290565b604081016156188461595b565b9281526020015290565b606081016155cd85615965565b60608101600885106155cd57fe5b6020810161564a83615913565b825292915050565b600061565d8661596f565b8582528460208301526001600160a01b03841660408301526080606083015261506b6080830184614f2c565b604081016156188461594e565b6000608082526156a96080830187614f2c565b602083820381850152818751808452828401915082838202850101838a01865b838110156156f757601f198784030185526156e5838351614f74565b948601949250908501906001016156c9565b5050868103604088015261570b818a614efb565b94505050505082810360608401526152008185614ea4565b60208082526013908201527f554e4b4e4f574e5f52455455524e5f4441544100000000000000000000000000604082015260600190565b60208082526019908201527f554e4b4e4f574e5f46554e4354494f4e5f53454c4543544f5200000000000000604082015260600190565b6020808252600d908201527f554e494d504c454d454e54454400000000000000000000000000000000000000604082015260600190565b6020808252600c908201527f4241445f53454c4543544f520000000000000000000000000000000000000000604082015260600190565b6020808252600e908201527f57524f4e475f50524f58595f4944000000000000000000000000000000000000604082015260600190565b60a081016158448286614f58565b8360608301528215156080830152949350505050565b600060208252610ceb6020830184614f74565b6000604082526158806040830185614f74565b82810360208401526153298185614f2c565b9283526020830191909152604082015260600190565b60405181810167ffffffffffffffff811182821017156158c757600080fd5b604052919050565b600067ffffffffffffffff8211156158e5578081fd5b5060209081020190565b600067ffffffffffffffff821115615905578081fd5b50601f01601f191660200190565b8060058110610c9057fe5b60005b83811015615939578181015183820152602001615921565b83811115615948576000848401525b50505050565b6002811061595857fe5b50565b6004811061595857fe5b6003811061595857fe5b6007811061595857fe5b6001600160a01b038116811461595857600080fd5b60ff8116811461595857600080fdfea365627a7a72315820a90c93bc636cf863e6e16fc0c4b6869195e557e923eae128ff96ab4e690fc54f6c6578706572696d656e74616cf564736f6c634300050d0040" + "object": "0x60806040523480156200001157600080fd5b5060405162005f1338038062005f138339810160408190526200003491620004c6565b600080546001600160a01b0319166001600160a01b03838116919091178083556040517f607041080000000000000000000000000000000000000000000000000000000081528493928392859283929190911690636070410890620000be907ff47261b00000000000000000000000000000000000000000000000000000000090600401620004f6565b60206040518083038186803b158015620000d757600080fd5b505afa158015620000ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620001129190810190620004c6565b600180546001600160a01b0319166001600160a01b039283161790556000546040517f6070410800000000000000000000000000000000000000000000000000000000815291169063607041089062000190907f025717920000000000000000000000000000000000000000000000000000000090600401620004f6565b60206040518083038186803b158015620001a957600080fd5b505afa158015620001be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620001e49190810190620004c6565b600280546001600160a01b0319166001600160a01b039283161790556000546040517f6070410800000000000000000000000000000000000000000000000000000000815291169063607041089062000262907fa7cb5fb70000000000000000000000000000000000000000000000000000000090600401620004f6565b60206040518083038186803b1580156200027b57600080fd5b505afa15801562000290573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620002b69190810190620004c6565b600380546001600160a01b0319166001600160a01b039283161790556000546040517f6070410800000000000000000000000000000000000000000000000000000000815291169063607041089062000334907fc339d10a0000000000000000000000000000000000000000000000000000000090600401620004f6565b60206040518083038186803b1580156200034d57600080fd5b505afa15801562000362573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620003889190810190620004c6565b600480546001600160a01b0319166001600160a01b03928316179055600092508316159050620003b95781620003bb565b305b9050620004406040518060400160405280600b81526020017f30782050726f746f636f6c0000000000000000000000000000000000000000008152506040518060400160405280600581526020017f332e302e3000000000000000000000000000000000000000000000000000000081525085846200046f60201b620035c91760201c565b6005555050600680546001600160a01b0319166001600160a01b03939093169290921790915550620005239050565b8351602094850120835193850193909320604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f815295860194909452928401929092526060830152608082015260a0902090565b600060208284031215620004d8578081fd5b81516001600160a01b0381168114620004ef578182fd5b9392505050565b7fffffffff0000000000000000000000000000000000000000000000000000000091909116815260200190565b6159e080620005336000396000f3fe608060405234801561001057600080fd5b50600436106102e95760003560e01c80639a7e752611610191578063ca49f47c116100e3578063d3d862d111610097578063e4e6e7da11610071578063e4e6e7da14610760578063e77286eb14610781578063ee4f5a94146107a3576102e9565b8063d3d862d11461070b578063d46950281461071e578063e25cabf71461073e576102e9565b8063d001c5dc116100c8578063d001c5dc146106c5578063d186037f146106d8578063d3637905146106eb576102e9565b8063ca49f47c14610681578063cafd3a07146106a4576102e9565b8063a6627e9f11610145578063bbb2dcf61161011f578063bbb2dcf614610636578063bc03f96414610658578063c26cfecd14610679576102e9565b8063a6627e9f146105ed578063acaedc7414610600578063b43cffe114610623576102e9565b8063a070cac811610176578063a070cac8146105a7578063a0901e51146105ba578063a5cd62ba146105cd576102e9565b80639a7e7526146105605780639eadc83514610583576102e9565b806346eb65cb1161024a5780636f83188e116101fe5780637b66ad34116101d85780637b66ad34146105195780637d7275121461053a5780638f4ce4791461054d576102e9565b80636f83188e146104c25780637914b2ec146104e557806379c9c42614610506576102e9565b8063590aa8751161022f578063590aa8751461046d57806363eb39921461048d57806365129042146104a0576102e9565b806346eb65cb146104385780634dfdac201461044d576102e9565b8063314853ff116102a157806332aae3ad1161028657806332aae3ad146103d25780633db6dc61146103f4578063459be5e214610417576102e9565b8063314853ff1461039d578063327d3054146103bf576102e9565b80630d7b7d76116102d25780630d7b7d761461033a578063165979e11461035b5780632322cf761461037d576102e9565b806302d0aec3146102ee57806304a5618a14610318575b600080fd5b6103016102fc3660046149e0565b6107c5565b60405161030f9291906153ec565b60405180910390f35b61032b6103263660046149e0565b610821565b60405161030f939291906154e7565b61034d610348366004614511565b61089c565b60405161030f92919061539a565b61036e6103693660046149e0565b6108be565b60405161030f93929190615622565b61039061038b366004614511565b61091b565b60405161030f9190615357565b6103b06103ab3660046149e0565b610943565b60405161030f939291906153c1565b61034d6103cd3660046149e0565b61098a565b6103e56103e03660046149e0565b6109cc565b60405161030f93929190615598565b6104076104023660046149e0565b610a1f565b60405161030f9493929190615360565b61042a6104253660046149e0565b610a69565b60405161030f92919061560b565b61044b6104463660046149e0565b610abf565b005b61046061045b366004614438565b610bbb565b60405161030f91906152f1565b61048061047b3660046142b1565b610c3e565b60405161030f9190615547565b61048061049b366004614555565b610c95565b6104b36104ae3660046149e0565b610cf2565b60405161030f939291906150bf565b6104d56104d03660046149e0565b610d2c565b60405161030f9493929190615696565b6104f86104f33660046149e0565b6115e1565b60405161030f92919061541e565b610390610514366004614c3f565b611619565b61052c6105273660046149e0565b6116a2565b60405161030f9291906150a5565b610390610548366004614511565b6116da565b6104f861055b3660046149e0565b611cc1565b61057361056e3660046149e0565b611d1e565b60405161030f9493929190615652565b6105966105913660046149e0565b611d7f565b60405161030f959493929190615441565b6103906105b5366004614b3a565b611df7565b6104606105c83660046145d7565b611e78565b6105e06105db36600461463d565b611ef1565b60405161030f919061520b565b6104806105fb3660046145ac565b611fb4565b61061361060e3660046149e0565b61200d565b60405161030f9493929190615167565b610480610631366004614486565b612049565b6106496106443660046149e0565b6120a8565b60405161030f93929190615512565b61066b6106663660046149e0565b612122565b60405161030f9291906153a8565b61039061215b565b61069461068f3660046149e0565b612161565b60405161030f94939291906154a4565b6106b76106b23660046149e0565b6121df565b60405161030f929190615689565b6104606106d3366004614438565b61222d565b6103906106e6366004614511565b61229b565b6106fe6106f9366004614a8b565b612757565b60405161030f919061563d565b6104806107193660046147e5565b612cc5565b61073161072c3660046149e0565b612ce4565b60405161030f9190615409565b61075161074c3660046146c1565b612d94565b60405161030f93929190615256565b61077361076e366004614438565b612ecc565b60405161030f929190615332565b61079461078f366004614ae3565b612ee5565b60405161030f93929190615836565b6107b66107b13660046149e0565b61311f565b60405161030f939291906155e1565b6000806107d9836107d461315c565b613180565b60006107f260048551866131c09092919063ffffffff16565b8060200190516108059190810190614993565b909350905060ff8116600681111561081957fe5b915050915091565b60008080610835848263ffffffff61320316565b92506001600160e01b0319831663012b8bc960e11b146108705760405162461bcd60e51b8152600401610867906157ff565b60405180910390fd5b61088184601063ffffffff61323716565b915061089484602463ffffffff61326a16565b929491935050565b6000806108a984846116da565b91506108b5848461229b565b90509250929050565b60008060006108cf846107d4613276565b60006108e860048651876131c09092919063ffffffff16565b8060200190516108fb9190810190614e1e565b9094509250905060ff8116600281111561091157fe5b9350509193909250565b600080600061092a858561089c565b91509150610938828261329a565b925050505b92915050565b6000606080610954846107d46132b0565b835161096a90859060049063ffffffff6131c016565b80602001905161097d9190810190614933565b9196909550909350915050565b600080610999836107d46132d4565b82516109af90849060049063ffffffff6131c016565b8060200190516109c291908101906148d5565b9094909350915050565b60008060606109dd846107d46132f8565b60006109f660048651876131c09092919063ffffffff16565b806020019051610a099190810190614dd2565b9094509250905060ff8116600181111561091157fe5b600080606080610a31856107d461331c565b8451610a4790869060049063ffffffff6131c016565b806020019051610a5a9190810190614891565b92989197509550909350915050565b600080610a78836107d4613340565b6000610a9160048551866131c09092919063ffffffff16565b806020019051610aa49190810190614d10565b9250905060ff81166003811115610ab757fe5b925050915091565b6000610ad1828263ffffffff61320316565b90506001600160e01b03198116630f47261b60e41b1415610afc57610af582611cc1565b5050610bb7565b6001600160e01b0319811663012b8bc960e11b1415610b2657610b1e82610821565b505050610bb7565b6001600160e01b0319811663a7cb5fb760e01b1415610b5257610b4882611d7f565b5050505050610bb7565b6001600160e01b031981166394cfcdd760e01b1415610b7457610b1e826120a8565b6001600160e01b0319811663619ce88560e11b1415610b9f57610b9682612161565b50505050610bb7565b60405162461bcd60e51b8152600401610867906157ff565b5050565b606060008251905080604051908082528060200260200182016040528015610bed578160200160208202803883390190505b50915060005b818114610c3657610c1785858381518110610c0a57fe5b602002602001015161229b565b838281518110610c2357fe5b6020908102919091010152600101610bf3565b505092915050565b604051606090630f47261b60e41b90610c5b908490602401615091565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915290505b919050565b60405160609063619ce88560e11b90610cb690869086908690602401615135565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915290505b9392505050565b6000806000610d03846107d4613364565b8351610d1990859060049063ffffffff6131c016565b80602001905161097d9190810190614306565b60608080806000610d43868263ffffffff61320316565b90506001600160e01b0319811663dedfc1f160e01b1415610d9b576040518060400160405280601181526020017f626174636843616e63656c4f726465727300000000000000000000000000000081525094506111e3565b6001600160e01b03198116634b4a520160e11b1415610df1576040518060400160405280600f81526020017f626174636846696c6c4f7264657273000000000000000000000000000000000081525094506111e3565b6001600160e01b031981166323aa37f960e21b1415610e47576040518060400160405280601681526020017f626174636846696c6c4f72646572734e6f5468726f770000000000000000000081525094506111e3565b6001600160e01b03198116632fbb8b8560e21b1415610e9d576040518060400160405280601581526020017f626174636846696c6c4f724b696c6c4f7264657273000000000000000000000081525094506111e3565b6001600160e01b03198116632da6298760e01b1415610ef3576040518060400160405280600b81526020017f63616e63656c4f7264657200000000000000000000000000000000000000000081525094506111e3565b6001600160e01b03198116634da26aab60e11b1415610f49576040518060400160405280600981526020017f66696c6c4f72646572000000000000000000000000000000000000000000000081525094506111e3565b6001600160e01b03198116633852d63160e21b1415610f9f576040518060400160405280600f81526020017f66696c6c4f724b696c6c4f72646572000000000000000000000000000000000081525094506111e3565b6001600160e01b031981166378d29ac160e01b1415610ff5576040518060400160405280601681526020017f6d61726b65744275794f72646572734e6f5468726f770000000000000000000081525094506111e3565b6001600160e01b0319811663369da09960e01b141561104b576040518060400160405280601781526020017f6d61726b657453656c6c4f72646572734e6f5468726f7700000000000000000081525094506111e3565b6001600160e01b03198116638bc8efb360e01b14156110a1576040518060400160405280601981526020017f6d61726b65744275794f726465727346696c6c4f724b696c6c0000000000000081525094506111e3565b6001600160e01b0319811663a6c3bf3360e01b14156110f7576040518060400160405280601a81526020017f6d61726b657453656c6c4f726465727346696c6c4f724b696c6c00000000000081525094506111e3565b6001600160e01b031981166388ec79fb60e01b141561114d576040518060400160405280600b81526020017f6d617463684f726465727300000000000000000000000000000000000000000081525094506111e3565b6001600160e01b031981167f4f9559b10000000000000000000000000000000000000000000000000000000014806111ae57506001600160e01b031981167f2280c91000000000000000000000000000000000000000000000000000000000145b156111cb5760405162461bcd60e51b815260040161086790615791565b60405162461bcd60e51b81526004016108679061575a565b6001600160e01b0319811663dedfc1f160e01b141561126f57855161121290879060049063ffffffff61338816565b806020019051611225919081019061460a565b604080516000808252602082019092529195505b5060408051600080825260208201909252919450611267565b60608152602001906001900390816112525790505b5091506115d9565b6001600160e01b03198116632fbb8b8560e21b148061129e57506001600160e01b03198116634b4a520160e11b145b806112b957506001600160e01b031981166323aa37f960e21b145b156112d3576112c786613408565b919550935091506115d9565b6001600160e01b03198116632da6298760e01b14156113a25760408051600180825281830190925290816020015b611309613be4565b815260200190600190039081611301575050865190945061133490879060049063ffffffff61338816565b8060200190516113479190810190614a58565b8460008151811061135457fe5b60200260200101819052506000604051908082528060200260200182016040528015611239578160200160208202803883390190505060408051600080825260208201909252919450611267565b6001600160e01b03198116633852d63160e21b14806113d157506001600160e01b03198116634da26aab60e11b145b156113df576112c786613437565b6001600160e01b031981166378d29ac160e01b148061140e57506001600160e01b0319811663369da09960e01b145b8061142957506001600160e01b03198116638bc8efb360e01b145b8061144457506001600160e01b0319811663a6c3bf3360e01b145b15611452576112c786613531565b6001600160e01b031981166388ec79fb60e01b14156115d957611473613be4565b61147b613be4565b60608061149560048b518c6133889092919063ffffffff16565b8060200190516114a89190810190614b93565b604080516002808252606082019092529498509296509094509250816020015b6114d0613be4565b8152602001906001900390816114c857905050975083886000815181106114f357fe5b6020026020010181905250828860018151811061150c57fe5b602090810291909101015260408051600280825260608201909252908160200160208202803883390190505096508360a001518760008151811061154c57fe5b6020026020010181815250508260a001518760018151811061156a57fe5b60209081029190910101526040805160028082526060820190925290816020015b606081526020019060019003908161158b57905050955081866000815181106115b057fe5b602002602001018190525080866001815181106115c957fe5b6020026020010181905250505050505b509193509193565b6000806115f0836107d46135a5565b825161160690849060049063ffffffff6131c016565b8060200190516109c291908101906149b7565b600061169a846116956040518060400160405280600b81526020017f30782050726f746f636f6c0000000000000000000000000000000000000000008152506040518060400160405280600581526020017f332e302e3000000000000000000000000000000000000000000000000000000081525087876135c9565b613620565b949350505050565b6000806116b1836107d4613634565b82516116c790849060049063ffffffff6131c016565b8060200190516109c291908101906142cd565b6000806116ed838263ffffffff61320316565b90506001600160e01b03198116630f47261b60e41b141561181f57600061171b84601063ffffffff61323716565b6040519091506060907f70a082310000000000000000000000000000000000000000000000000000000090611754908890602401615091565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060836001600160a01b0316836040516117a59190615075565b600060405180830381855afa9150503d80600081146117e0576040519150601f19603f3d011682016040523d82523d6000602084013e6117e5565b606091505b50915091508180156117f8575080516020145b611803576000611814565b61181481600063ffffffff61326a16565b955050505050611cba565b6001600160e01b0319811663012b8bc960e11b14156119775760008061184485610821565b6040519194509250606091507f6352211e0000000000000000000000000000000000000000000000000000000090611880908490602401615357565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060846001600160a01b0316836040516118d19190615075565b600060405180830381855afa9150503d806000811461190c576040519150601f19603f3d011682016040523d82523d6000602084013e611911565b606091505b50915091506000828015611926575081516020145b611931576000611942565b61194282600c63ffffffff61323716565b9050896001600160a01b0316816001600160a01b031614611964576000611967565b60015b60ff169750505050505050611cba565b6001600160e01b0319811663a7cb5fb760e01b1415611b1757600060608061199e86611d7f565b5081519296509094509250905060005b818114611b0d5783516060907efdd58e00000000000000000000000000000000000000000000000000000000908b908790859081106119e957fe5b6020026020010151604051602401611a0292919061519b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060876001600160a01b031683604051611a539190615075565b600060405180830381855afa9150503d8060008114611a8e576040519150601f19603f3d011682016040523d82523d6000602084013e611a93565b606091505b50915091506000828015611aa8575081516020145b611ab3576000611ac4565b611ac482600063ffffffff61326a16565b90506000878681518110611ad457fe5b60200260200101518281611ae457fe5b0490508b811080611af357508b155b15611afc57809b505b5050600190930192506119ae915050565b5050505050611cba565b6001600160e01b0319811663619ce88560e11b1415611c1c576040516060907fa85e59e40000000000000000000000000000000000000000000000000000000090611b6d9086906000908190819060240161555a565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925260045491519092506000916001600160a01b031690611bbf908490615075565b600060405180830381855afa9150503d8060008114611bfa576040519150601f19603f3d011682016040523d82523d6000602084013e611bff565b606091505b5050905080611c0f576000611c13565b6000195b93505050611cba565b6001600160e01b031981166394cfcdd760e01b1415611cba57606080611c41856120a8565b80519194509250905060005b818114611cb5576000611c7389858481518110611c6657fe5b60200260200101516116da565b90506000858381518110611c8357fe5b60200260200101518281611c9357fe5b04905087811080611ca2575087155b15611cab578097505b5050600101611c4d565b505050505b5092915050565b600080611cd4838263ffffffff61320316565b91506001600160e01b03198216630f47261b60e41b14611d065760405162461bcd60e51b8152600401610867906157ff565b611d1783601063ffffffff61323716565b9050915091565b60008060006060611d31856107d4613658565b6000611d4a60048751886131c09092919063ffffffff16565b806020019051611d5d9190810190614d74565b91965094509250905060ff81166006811115611d7557fe5b9450509193509193565b60008060608080611d96868563ffffffff61320316565b94506001600160e01b0319851663a7cb5fb760e01b14611dc85760405162461bcd60e51b8152600401610867906157ff565b505050506024828101516044840151606485015160848601519496929591820184019490820184019391010190565b600061169a84611e736040518060400160405280600b81526020017f30782050726f746f636f6c0000000000000000000000000000000000000000008152506040518060400160405280600581526020017f332e302e3000000000000000000000000000000000000000000000000000000081525087876135c9565b61367c565b6060808251604051908082528060200260200182016040528015611ea6578160200160208202803883390190505b50905060005b83518114611cba57838181518110611ec057fe5b60200260200101516001600160a01b031631828281518110611ede57fe5b6020908102919091010152600101611eac565b606060008451905080604051908082528060200260200182016040528015611f23578160200160208202803883390190505b50915060005b818114611fab57611f74868281518110611f3f57fe5b6020026020010151868381518110611f5357fe5b6020026020010151868481518110611f6757fe5b6020026020010151612757565b838281518110611f8057fe5b60200260200101906004811115611f9357fe5b90816004811115611fa057fe5b905250600101611f29565b50509392505050565b60405160609063012b8bc960e11b90611fd3908590859060240161519b565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905092915050565b60006060806060612020856107d461368b565b845161203690869060049063ffffffff6131c016565b806020019051610a5a91908101906143a0565b60405160609063a7cb5fb760e01b9061206c9087908790879087906024016150e3565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050949350505050565b60006060806120bd848463ffffffff61320316565b92506001600160e01b031983166394cfcdd760e01b146120ef5760405162461bcd60e51b8152600401610867906157ff565b835161210590859060049063ffffffff61338816565b806020019051612118919081019061481a565b9395909450915050565b60006060612132836107d46136af565b825161214890849060049063ffffffff6131c016565b8060200190516109c291908101906148f8565b60055481565b600080606081612177858263ffffffff61320316565b93506001600160e01b0319841663619ce88560e11b146121a95760405162461bcd60e51b8152600401610867906157ff565b84516121bf90869060049063ffffffff61338816565b8060200190516121d29190810190614348565b9597919650949350915050565b6000806121ee836107d46136d3565b600061220760048551866131c09092919063ffffffff16565b80602001905161221a9190810190614d10565b9250905060ff81166001811115610ab757fe5b60606000825190508060405190808252806020026020018201604052801561225f578160200160208202803883390190505b50915060005b818114610c365761227c85858381518110611c6657fe5b83828151811061228857fe5b6020908102919091010152600101612265565b6000806122ae838263ffffffff61320316565b90506001600160e01b031981166394cfcdd760e01b1415612347576060806122d5856120a8565b80519194509250905060005b81811461233c5760006122fa89858481518110610c0a57fe5b9050600085838151811061230a57fe5b6020026020010151828161231a57fe5b04905087811080612329575087155b15612332578097505b50506001016122e1565b5061093d9350505050565b6001600160e01b03198116630f47261b60e41b14156123b957600061237384601063ffffffff61323716565b6001546040519192506060917fdd62ed3e00000000000000000000000000000000000000000000000000000000916117549189916001600160a01b0316906024016150a5565b6001600160e01b0319811663012b8bc960e11b1415612605576000806123de85610821565b6002546040519295509093506060925063e985e9c560e01b91612411918a916001600160a01b03909116906024016150a5565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060846001600160a01b0316836040516124629190615075565b600060405180830381855afa9150503d806000811461249d576040519150601f19603f3d011682016040523d82523d6000602084013e6124a2565b606091505b50915091508115806124b657508051602014155b806124d257506124cd81600063ffffffff61326a16565b600114155b156125f6576040516060907f081812fc000000000000000000000000000000000000000000000000000000009061250d908790602401615357565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050856001600160a01b03168160405161255a9190615075565b600060405180830381855afa9150503d8060008114612595576040519150601f19603f3d011682016040523d82523d6000602084013e61259a565b606091505b5090935091508280156125ae575081516020145b80156125dd57506002546001600160a01b03166125d283600c63ffffffff61323716565b6001600160a01b0316145b6125e85760006125eb565b60015b60ff16975050611b0d565b60001996505050505050611cba565b6001600160e01b0319811663a7cb5fb760e01b141561273357600061262984611d7f565b50506003546040519294506060935063e985e9c560e01b9261265a925089916001600160a01b0316906024016150a5565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060836001600160a01b0316836040516126ab9190615075565b600060405180830381855afa9150503d80600081146126e6576040519150601f19603f3d011682016040523d82523d6000602084013e6126eb565b606091505b50915091508180156126fe575080516020145b801561271a575061271681600063ffffffff61326a16565b6001145b612725576000611814565b600019955050505050611cba565b6001600160e01b0319811663619ce88560e11b1415611cba57506000199392505050565b6000612761613c77565b6127f28584600660009054906101000a90046001600160a01b03166001600160a01b0316631ce4c78b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156127b457600080fd5b505afa1580156127c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506127ec9190810190614cf8565b3a6136f7565b60408051600480825260a0820190925291925060609190816020015b606081526020019060019003908161280e57505060408051600480825260a082019092529192506060919060208201608080388339505060408051600480825260a08201909252929350606092915060208201608080388339505060408051600480825260a08201909252929350606092915060208201608080388339019050509050886101600151846000815181106128a457fe5b602002602001018190525087836000815181106128bd57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508860000151826000815181106128ef57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050868160008151811061291d57fe5b6020026020010181815250508861014001518460018151811061293c57fe5b602002602001018190525088600001518360018151811061295957fe5b60200260200101906001600160a01b031690816001600160a01b031681525050878260018151811061298757fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508460000151816001815181106129b957fe5b602002602001018181525050886101a00151846002815181106129d857fe5b602002602001018190525087836002815181106129f157fe5b60200260200101906001600160a01b031690816001600160a01b031681525050886040015182600281518110612a2357fe5b60200260200101906001600160a01b031690816001600160a01b031681525050846060015181600281518110612a5557fe5b60200260200101818152505088610180015184600381518110612a7457fe5b6020026020010181905250886000015183600381518110612a9157fe5b60200260200101906001600160a01b031690816001600160a01b031681525050886040015182600381518110612ac357fe5b60200260200101906001600160a01b031690816001600160a01b031681525050846040015181600381518110612af557fe5b60209081029190910101526040516060907fb04fbddd0000000000000000000000000000000000000000000000000000000090612b3c9087908790879087906024016151b4565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925260065491519092506060916001600160a01b031690612b8e908490615075565b6000604051808303816000865af19150503d8060008114612bcb576040519150601f19603f3d011682016040523d82523d6000602084013e612bd0565b606091505b50915060009050612be7828263ffffffff61320316565b9050612bf16132f8565b6001600160e01b031982811691161415612c33576000612c10836109cc565b5091505060ff81166004811115612c2357fe5b9950505050505050505050610ceb565b612c3b6132b0565b6001600160e01b031982811691161415612c6e576000612c5a83610943565b509091505060ff81166004811115612c2357fe5b815160208301207ff43f26ea5a94b478394a975e856464913dc1a8a1ca70939d974aa7c238aa0ce01415612cad57600498505050505050505050610ceb565b60405162461bcd60e51b815260040161086790615723565b6040516060906394cfcdd760e01b90611fd39085908590602401615304565b6000612cf6828263ffffffff61320316565b90506001600160e01b03198116630f47261b60e41b1480612d2757506001600160e01b0319811663012b8bc960e11b145b80612d4257506001600160e01b0319811663a7cb5fb760e01b145b80612d5d57506001600160e01b031981166394cfcdd760e01b145b80612d7857506001600160e01b0319811663619ce88560e11b145b610c905760405162461bcd60e51b8152600401610867906157ff565b606080606060008551905080604051908082528060200260200182016040528015612dd957816020015b612dc6613ca6565b815260200190600190039081612dbe5790505b50935080604051908082528060200260200182016040528015612e06578160200160208202803883390190505b50925080604051908082528060200260200182016040528015612e33578160200160208202803883390190505b50915060005b818114612ec357612e70878281518110612e4f57fe5b6020026020010151878381518110612e6357fe5b6020026020010151612ee5565b8751889085908110612e7e57fe5b60200260200101878581518110612e9157fe5b60200260200101878681518110612ea457fe5b9315156020948502919091019093019290925291905252600101612e39565b50509250925092565b606080612ed9848461222d565b91506108b58484610bbb565b612eed613ca6565b600080546040517f9d3fa4b900000000000000000000000000000000000000000000000000000000815282916001600160a01b031690639d3fa4b990612f3790889060040161585a565b60606040518083038186803b158015612f4f57600080fd5b505afa158015612f63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612f879190810190614a13565b85516000546040517fa12dcc6f00000000000000000000000000000000000000000000000000000000815292955090916001600160a01b039091169063a12dcc6f90612fd9908990899060040161586d565b60206040518083038186803b158015612ff157600080fd5b505afa158015613005573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506130299190810190614871565b9150600061303c8288610140015161091b565b60a088015160c08901516101808a01516101408b01519394509192909160009161306b9163ffffffff61376e16565b15613098576130918461308b848d6080015161379390919063ffffffff16565b856137af565b90506130f1565b816130ac57613091848b60800151856137af565b60006130bd868c610180015161091b565b905060006130d0868d60800151876137af565b905060006130df8386886137af565b90506130eb828261329a565b93505050505b61311161310b8960400151856137d190919063ffffffff16565b8261329a565b965050505050509250925092565b6000806000613130846107d46137f0565b600061314960048651876131c09092919063ffffffff16565b8060200190516108fb9190810190614d3d565b7ffdb6ca8d0000000000000000000000000000000000000000000000000000000090565b600061318d836000613203565b90506001600160e01b0319808216908316146131bb5760405162461bcd60e51b8152600401610867906157c8565b505050565b6060818311156131de576131de6131d960008585613814565b613833565b83518211156131f7576131f76131d96001848751613814565b50819003910190815290565b60008160040183511015613224576132246131d96003855185600401613814565b5001602001516001600160e01b03191690565b60008160140183511015613258576132586131d96004855185601401613814565b5001601401516001600160a01b031690565b6000610ceb838361383b565b7f18e4b1410000000000000000000000000000000000000000000000000000000090565b60008183106132a95781610ceb565b5090919050565b7f4678472b0000000000000000000000000000000000000000000000000000000090565b7fb6555d6f0000000000000000000000000000000000000000000000000000000090565b7f488219a60000000000000000000000000000000000000000000000000000000090565b7f1b8388f70000000000000000000000000000000000000000000000000000000090565b7fe94a7ed00000000000000000000000000000000000000000000000000000000090565b7f4ad312750000000000000000000000000000000000000000000000000000000090565b6060818311156133a1576133a16131d960008585613814565b83518211156133ba576133ba6131d96001848751613814565b8282036040519080825280601f01601f1916602001820160405280156133e7576020820181803883390190505b509050610ceb6133f682613865565b8461340087613865565b01835161386b565b606080606061342460048551866133889092919063ffffffff16565b80602001905161097d9190810190614718565b60408051600180825281830190925260609182918291816020015b61345a613be4565b8152602001906001900390816134525750506040805160018082528183019092529194506020808301908038833901905050604080516001808252818301909252919350816020015b60608152602001906001900390816134a357505084519091506134d090859060049063ffffffff61338816565b8060200190516134e39190810190614bec565b856000815181106134f057fe5b602002602001018560008151811061350457fe5b602002602001018560008151811061351857fe5b6020908102919091010192909252919052529193909250565b60408051600180825281830190925260609182918291602080830190803883395050855191935061356d9186915060049063ffffffff61338816565b8060200190516135809190810190614792565b8451859060009061358d57fe5b60209081029190910101919091529095929450925050565b7f11c7b7200000000000000000000000000000000000000000000000000000000090565b8351602094850120835193850193909320604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f815295860194909452928401929092526060830152608082015260a0902090565b6000610ceb8261362f85613910565b61398b565b7fa15c0d060000000000000000000000000000000000000000000000000000000090565b7f7e5a23180000000000000000000000000000000000000000000000000000000090565b6000610ceb8261362f856139c5565b7f5bd0428d0000000000000000000000000000000000000000000000000000000090565b7f20d11f610000000000000000000000000000000000000000000000000000000090565b7ff59851840000000000000000000000000000000000000000000000000000000090565b6136ff613c77565b6020810184905260a0850151608086015161371b918691613a7e565b815260a085015160c0860151613732918691613a7e565b604082015260a085015160e086015161374c918691613a7e565b6060820152613761828463ffffffff613ab216565b6080820152949350505050565b600081518351148015610ceb5750508051602091820120825192909101919091201490565b600082820183811015610ceb57610ceb6131d960008686613adf565b600061169a836137c5868563ffffffff613ab216565b9063ffffffff613afe16565b6000828211156137ea576137ea6131d960028585613adf565b50900390565b7fe53c76c80000000000000000000000000000000000000000000000000000000090565b6060632800659560e01b848484604051602401610cb69392919061562f565b805160208201fd5b6000816020018351101561385c5761385c6131d96005855185602001613814565b50016020015190565b60200190565b6020811015613895576001816020036101000a0380198351168185511680821786525050506131bb565b828214156138a2576131bb565b828211156138dc5760208103905080820181840181515b828510156138d45784518652602095860195909401936138b9565b9052506131bb565b60208103905080820181840183515b818612156139075782518252601f1992830192909101906138eb565b85525050505050565b608081810151825160208085015160408087015160609788015186519685019690962082517fec69816980a3a3ca4554410e60253953e9ff375ba4536a98adfa15cc7154150881529485019590955290830191909152948101949094526001600160a01b039091169183019190915260a082015260c0902090565b6040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6101408101516101608201516101808301516101a08401516000937ff80322eb8376aafb64eadf8f0d7623f22130fd9491a221e902b713cb984a753493909290916020871015613a1157fe5b601f1987018051610140890180516101608b0180516101808d0180516101a08f0180519d89528c5160209d8e012087528b519b8d019b909b2084528951998c01999099208152875197909a019690962088526101e085209390945290529190529252919091529050919050565b6000613a8b848484613b28565b15613a9e57613a9e6131d9858585613b8e565b61169a836137c5868563ffffffff613ab216565b600082613ac15750600061093d565b82820282848281613ace57fe5b0414610ceb57610ceb6131d9600186865b606063e946c1bb60e01b848484604051602401610cb6939291906155c0565b600081613b1457613b146131d960038585613adf565b6000828481613b1f57fe5b04949350505050565b600082613b3a57613b3a6131d9613bad565b811580613b45575083155b15613b5257506000610ceb565b60008380613b5c57fe5b8584099050613b71858463ffffffff613ab216565b613b83826103e863ffffffff613ab216565b101595945050505050565b606063339f3de260e01b848484604051602401610cb693929190615892565b60408051808201909152600481527fa791837c00000000000000000000000000000000000000000000000000000000602082015290565b604051806101c0016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001606081525090565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b803561093d81615979565b805161093d81615979565b600082601f830112613cec578081fd5b8135613cff613cfa826158cf565b6158a8565b818152915060208083019084810181840286018201871015613d2057600080fd5b60005b84811015611cb5578135613d3681615979565b84529282019290820190600101613d23565b600082601f830112613d58578081fd5b8151613d66613cfa826158cf565b8181529150602080830190840160005b83811015613da357613d8e8760208451890101613fc8565b83526020928301929190910190600101613d76565b5050505092915050565b600082601f830112613dbd578081fd5b8135613dcb613cfa826158cf565b8181529150602080830190840160005b83811015613da357613df38760208435890101613f7a565b83526020928301929190910190600101613ddb565b600082601f830112613e18578081fd5b8151613e26613cfa826158cf565b8181529150602080830190840160005b83811015613da357613e4e876020845189010161415d565b83526020928301929190910190600101613e36565b600082601f830112613e73578081fd5b8135613e81613cfa826158cf565b8181529150602080830190840160005b83811015613da357613ea9876020843589010161400e565b83526020928301929190910190600101613e91565b600082601f830112613ece578081fd5b8151613edc613cfa826158cf565b818152915060208083019084810181840286018201871015613efd57600080fd5b60005b84811015611cb557815184529282019290820190600101613f00565b600082601f830112613f2c578081fd5b8135613f3a613cfa826158cf565b818152915060208083019084810181840286018201871015613f5b57600080fd5b60005b84811015611cb557813584529282019290820190600101613f5e565b600082601f830112613f8a578081fd5b8135613f98613cfa826158ef565b9150808252836020828501011115613faf57600080fd5b8060208401602084013760009082016020015292915050565b600082601f830112613fd8578081fd5b8151613fe6613cfa826158ef565b9150808252836020828501011115613ffd57600080fd5b611cba81602084016020860161591e565b60006101c0808385031215614021578182fd5b61402a816158a8565b9150506140378383613cc6565b81526140468360208401613cc6565b60208201526140588360408401613cc6565b604082015261406a8360608401613cc6565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e08201526101008083013581830152506101208083013581830152506101408083013567ffffffffffffffff808211156140cc57600080fd5b6140d886838701613f7a565b838501526101609250828501359150808211156140f457600080fd5b61410086838701613f7a565b8385015261018092508285013591508082111561411c57600080fd5b61412886838701613f7a565b838501526101a092508285013591508082111561414457600080fd5b5061415185828601613f7a565b82840152505092915050565b60006101c0808385031215614170578182fd5b614179816158a8565b9150506141868383613cd1565b81526141958360208401613cd1565b60208201526141a78360408401613cd1565b60408201526141b98360608401613cd1565b60608201526080820151608082015260a082015160a082015260c082015160c082015260e082015160e08201526101008083015181830152506101208083015181830152506101408083015167ffffffffffffffff8082111561421b57600080fd5b61422786838701613fc8565b8385015261016092508285015191508082111561424357600080fd5b61424f86838701613fc8565b8385015261018092508285015191508082111561426b57600080fd5b61427786838701613fc8565b838501526101a092508285015191508082111561429357600080fd5b5061415185828601613fc8565b805160ff8116811461093d57600080fd5b6000602082840312156142c2578081fd5b8135610ceb81615979565b600080604083850312156142df578081fd5b82516142ea81615979565b60208401519092506142fb81615979565b809150509250929050565b60008060006060848603121561431a578081fd5b835161432581615979565b602085015190935061433681615979565b80925050604084015190509250925092565b60008060006060848603121561435c578081fd5b835161436781615979565b602085015190935067ffffffffffffffff811115614383578182fd5b61438f86828701613fc8565b925050604084015190509250925092565b600080600080608085870312156143b5578182fd5b84516143c081615979565b602086015190945067ffffffffffffffff808211156143dd578384fd5b6143e988838901613fc8565b945060408701519150808211156143fe578384fd5b61440a88838901613fc8565b9350606087015191508082111561441f578283fd5b5061442c87828801613fc8565b91505092959194509250565b6000806040838503121561444a578182fd5b823561445581615979565b9150602083013567ffffffffffffffff811115614470578182fd5b61447c85828601613dad565b9150509250929050565b6000806000806080858703121561449b578182fd5b84356144a681615979565b9350602085013567ffffffffffffffff808211156144c2578384fd5b6144ce88838901613f1c565b945060408701359150808211156144e3578384fd5b6144ef88838901613f1c565b93506060870135915080821115614504578283fd5b5061442c87828801613f7a565b60008060408385031215614523578182fd5b823561452e81615979565b9150602083013567ffffffffffffffff811115614549578182fd5b61447c85828601613f7a565b600080600060608486031215614569578081fd5b833561457481615979565b9250602084013567ffffffffffffffff81111561458f578182fd5b61459b86828701613f7a565b925050604084013590509250925092565b600080604083850312156145be578182fd5b82356145c981615979565b946020939093013593505050565b6000602082840312156145e8578081fd5b813567ffffffffffffffff8111156145fe578182fd5b61169a84828501613cdc565b60006020828403121561461b578081fd5b815167ffffffffffffffff811115614631578182fd5b61169a84828501613e08565b600080600060608486031215614651578081fd5b833567ffffffffffffffff80821115614668578283fd5b61467487838801613e63565b94506020860135915080821115614689578283fd5b61469587838801613cdc565b935060408601359150808211156146aa578283fd5b506146b786828701613f1c565b9150509250925092565b600080604083850312156146d3578182fd5b823567ffffffffffffffff808211156146ea578384fd5b6146f686838701613e63565b9350602085013591508082111561470b578283fd5b5061447c85828601613dad565b60008060006060848603121561472c578081fd5b835167ffffffffffffffff80821115614743578283fd5b61474f87838801613e08565b94506020860151915080821115614764578283fd5b61477087838801613ebe565b93506040860151915080821115614785578283fd5b506146b786828701613d48565b6000806000606084860312156147a6578081fd5b835167ffffffffffffffff808211156147bd578283fd5b6147c987838801613e08565b9450602086015193506040860151915080821115614785578283fd5b600080604083850312156147f7578182fd5b823567ffffffffffffffff8082111561480e578384fd5b6146f686838701613f1c565b6000806040838503121561482c578182fd5b825167ffffffffffffffff80821115614843578384fd5b61484f86838701613ebe565b93506020850151915080821115614864578283fd5b5061447c85828601613d48565b600060208284031215614882578081fd5b81518015158114610ceb578182fd5b600080600080608085870312156148a6578182fd5b8451935060208501516148b881615979565b604086015190935067ffffffffffffffff808211156143fe578384fd5b600080604083850312156148e7578182fd5b505080516020909101519092909150565b6000806040838503121561490a578182fd5b82519150602083015167ffffffffffffffff811115614927578182fd5b61447c85828601613fc8565b600080600060608486031215614947578081fd5b83519250602084015167ffffffffffffffff80821115614965578283fd5b61497187838801613fc8565b93506040860151915080821115614986578283fd5b506146b786828701613fc8565b600080604083850312156149a5578182fd5b8251915060208301516142fb8161598e565b600080604083850312156149c9578182fd5b82516001600160e01b0319811681146142ea578283fd5b6000602082840312156149f1578081fd5b813567ffffffffffffffff811115614a07578182fd5b61169a84828501613f7a565b600060608284031215614a24578081fd5b614a2e60606158a8565b614a3884846142a0565b815260208301516020820152604083015160408201528091505092915050565b600060208284031215614a69578081fd5b815167ffffffffffffffff811115614a7f578182fd5b61169a8482850161415d565b600080600060608486031215614a9f578081fd5b833567ffffffffffffffff811115614ab5578182fd5b614ac18682870161400e565b9350506020840135614ad281615979565b929592945050506040919091013590565b60008060408385031215614af5578182fd5b823567ffffffffffffffff80821115614b0c578384fd5b614b188683870161400e565b93506020850135915080821115614b2d578283fd5b5061447c85828601613f7a565b600080600060608486031215614b4e578081fd5b833567ffffffffffffffff811115614b64578182fd5b614b708682870161400e565b935050602084013591506040840135614b8881615979565b809150509250925092565b60008060008060808587031215614ba8578182fd5b845167ffffffffffffffff80821115614bbf578384fd5b614bcb8883890161415d565b95506020870151915080821115614be0578384fd5b6143e98883890161415d565b600080600060608486031215614c00578081fd5b835167ffffffffffffffff80821115614c17578283fd5b614c238783880161415d565b9450602086015193506040860151915080821115614986578283fd5b600080600060608486031215614c53578081fd5b833567ffffffffffffffff80821115614c6a578283fd5b81860160a08189031215614c7c578384fd5b614c8660a06158a8565b92508035835260208101356020840152604081013560408401526060810135614cae81615979565b6060840152608081013582811115614cc4578485fd5b614cd089828401613f7a565b608085015250919450505060208401359150614cef8560408601613cc6565b90509250925092565b600060208284031215614d09578081fd5b5051919050565b60008060408385031215614d22578182fd5b8251614d2d8161598e565b6020939093015192949293505050565b600080600060608486031215614d51578081fd5b8351614d5c8161598e565b602085015160408601519194509250614b8881615979565b60008060008060808587031215614d89578182fd5b614d9386866142a0565b9350602085015192506040850151614daa81615979565b606086015190925067ffffffffffffffff811115614dc6578182fd5b61442c87828801613fc8565b600080600060608486031215614de6578081fd5b614df085856142a0565b925060208401519150604084015167ffffffffffffffff811115614e12578182fd5b6146b786828701613fc8565b600080600060608486031215614e32578081fd5b614e3c85856142a0565b925060208401519150604084015190509250925092565b6001600160a01b03169052565b6000815180845260208401935060208301825b82811015614e9a5781516001600160a01b0316865260209586019590910190600101614e73565b5093949350505050565b600081518084526020840180819550602083028101915060208501845b84811015614eef578284038852614ed9848351614f2c565b6020988901989094509190910190600101614ec1565b50919695505050505050565b6000815180845260208401935060208301825b82811015614e9a578151865260209586019590910190600101614f0e565b60008151808452614f4481602086016020860161591e565b601f01601f19169290920160200192915050565b805160ff16825260208082015190830152604090810151910152565b60006101c0614f84848451614e53565b6020830151614f966020860182614e53565b506040830151614fa96040860182614e53565b506060830151614fbc6060860182614e53565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e085015261010080840151818601525061012080840151818601525061014080840151828287015261501583870182614f2c565b915050610160915081840151858203838701526150328282614f2c565b92505050610180808401518583038287015261504e8382614f2c565b9150506101a09150818401518582038387015261506b8282614f2c565b9695505050505050565b6000825161508781846020870161591e565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60006001600160a01b0386168252608060208301526151056080830186614efb565b82810360408401526151178186614efb565b83810360608501526151298186614f2c565b98975050505050505050565b60006001600160a01b0385168252606060208301526151576060830185614f2c565b9050826040830152949350505050565b60006001600160a01b0386168252608060208301526151896080830186614f2c565b82810360408401526151178186614f2c565b6001600160a01b03929092168252602082015260400190565b6000608082526151c76080830187614ea4565b82810360208401526151d98187614e60565b83810360408501526151eb8187614e60565b91505082810360608401526152008185614efb565b979650505050505050565b602080825282518282018190526000918401906040840190835b8181101561524b576152378451615913565b835260209384019390920191600101615225565b509095945050505050565b606080825284519082018190526000906020906080840190828801845b8281101561529957615286848351614f58565b6060939093019290840190600101615273565b505050838103828501526152ad8187614efb565b84810360408601528551808252908301915082860190845b818110156152e35782511515845292840192918401916001016152c5565b509198975050505050505050565b600060208252610ceb6020830184614efb565b6000604082526153176040830185614efb565b82810360208401526153298185614ea4565b95945050505050565b6000604082526153456040830185614efb565b82810360208401526153298185614efb565b90815260200190565b60008582526001600160a01b0385166020830152608060408301526153886080830185614f2c565b82810360608401526152008185614f2c565b918252602082015260400190565b60008382526040602083015261169a6040830184614f2c565b6000848252606060208301526153da6060830185614f2c565b828103604084015261506b8185614f2c565b828152604081016153fc8361596f565b8260208301529392505050565b6001600160e01b031991909116815260200190565b6001600160e01b03199290921682526001600160a01b0316602082015260400190565b60006001600160e01b0319871682526001600160a01b038616602083015260a0604083015261547360a0830186614efb565b82810360608401526154858186614efb565b83810360808501526154978186614f2c565b9998505050505050505050565b60006001600160e01b0319861682526001600160a01b0385166020830152608060408301526154d66080830185614f2c565b905082606083015295945050505050565b6001600160e01b03199390931683526001600160a01b03919091166020830152604082015260600190565b60006001600160e01b031985168252606060208301526155356060830185614efb565b828103604084015261506b8185614ea4565b600060208252610ceb6020830184614f2c565b60006080825261556d6080830187614f2c565b6001600160a01b03958616602084015293909416604082015260ff9190911660609091015292915050565b60006155a38561594e565b848252836020830152606060408301526153296060830184614f2c565b606081016155cd8561595b565b938152602081019290925260409091015290565b606081016155ee85615965565b93815260208101929092526001600160a01b031660409091015290565b604081016156188461595b565b9281526020015290565b606081016155cd85615965565b60608101600885106155cd57fe5b6020810161564a83615913565b825292915050565b600061565d8661596f565b8582528460208301526001600160a01b03841660408301526080606083015261506b6080830184614f2c565b604081016156188461594e565b6000608082526156a96080830187614f2c565b602083820381850152818751808452828401915082838202850101838a01865b838110156156f757601f198784030185526156e5838351614f74565b948601949250908501906001016156c9565b5050868103604088015261570b818a614efb565b94505050505082810360608401526152008185614ea4565b60208082526013908201527f554e4b4e4f574e5f52455455524e5f4441544100000000000000000000000000604082015260600190565b60208082526019908201527f554e4b4e4f574e5f46554e4354494f4e5f53454c4543544f5200000000000000604082015260600190565b6020808252600d908201527f554e494d504c454d454e54454400000000000000000000000000000000000000604082015260600190565b6020808252600c908201527f4241445f53454c4543544f520000000000000000000000000000000000000000604082015260600190565b6020808252600e908201527f57524f4e475f50524f58595f4944000000000000000000000000000000000000604082015260600190565b60a081016158448286614f58565b8360608301528215156080830152949350505050565b600060208252610ceb6020830184614f74565b6000604082526158806040830185614f74565b82810360208401526153298185614f2c565b9283526020830191909152604082015260600190565b60405181810167ffffffffffffffff811182821017156158c757600080fd5b604052919050565b600067ffffffffffffffff8211156158e5578081fd5b5060209081020190565b600067ffffffffffffffff821115615905578081fd5b50601f01601f191660200190565b8060058110610c9057fe5b60005b83811015615939578181015183820152602001615921565b83811115615948576000848401525b50505050565b6002811061595857fe5b50565b6004811061595857fe5b6003811061595857fe5b6007811061595857fe5b6001600160a01b038116811461595857600080fd5b60ff8116811461595857600080fdfea365627a7a72315820a6e2caf6b8cfb25159763e34dd839685d57e0d8a74ab5a72d4f2913f3fbccc436c6578706572696d656e74616cf564736f6c634300050d0040" }, "deployedBytecode": { - "object": "0x608060405234801561001057600080fd5b50600436106102e95760003560e01c80639a7e752611610191578063ca49f47c116100e3578063d3d862d111610097578063e4e6e7da11610071578063e4e6e7da14610760578063e77286eb14610781578063ee4f5a94146107a3576102e9565b8063d3d862d11461070b578063d46950281461071e578063e25cabf71461073e576102e9565b8063d001c5dc116100c8578063d001c5dc146106c5578063d186037f146106d8578063d3637905146106eb576102e9565b8063ca49f47c14610681578063cafd3a07146106a4576102e9565b8063a6627e9f11610145578063bbb2dcf61161011f578063bbb2dcf614610636578063bc03f96414610658578063c26cfecd14610679576102e9565b8063a6627e9f146105ed578063acaedc7414610600578063b43cffe114610623576102e9565b8063a070cac811610176578063a070cac8146105a7578063a0901e51146105ba578063a5cd62ba146105cd576102e9565b80639a7e7526146105605780639eadc83514610583576102e9565b806346eb65cb1161024a5780636f83188e116101fe5780637b66ad34116101d85780637b66ad34146105195780637d7275121461053a5780638f4ce4791461054d576102e9565b80636f83188e146104c25780637914b2ec146104e557806379c9c42614610506576102e9565b8063590aa8751161022f578063590aa8751461046d57806363eb39921461048d57806365129042146104a0576102e9565b806346eb65cb146104385780634dfdac201461044d576102e9565b8063314853ff116102a157806332aae3ad1161028657806332aae3ad146103d25780633db6dc61146103f4578063459be5e214610417576102e9565b8063314853ff1461039d578063327d3054146103bf576102e9565b80630d7b7d76116102d25780630d7b7d761461033a578063165979e11461035b5780632322cf761461037d576102e9565b806302d0aec3146102ee57806304a5618a14610318575b600080fd5b6103016102fc3660046149e0565b6107c5565b60405161030f9291906153ec565b60405180910390f35b61032b6103263660046149e0565b610821565b60405161030f939291906154e7565b61034d610348366004614511565b61089c565b60405161030f92919061539a565b61036e6103693660046149e0565b6108be565b60405161030f93929190615622565b61039061038b366004614511565b61091b565b60405161030f9190615357565b6103b06103ab3660046149e0565b610943565b60405161030f939291906153c1565b61034d6103cd3660046149e0565b61098a565b6103e56103e03660046149e0565b6109cc565b60405161030f93929190615598565b6104076104023660046149e0565b610a1f565b60405161030f9493929190615360565b61042a6104253660046149e0565b610a69565b60405161030f92919061560b565b61044b6104463660046149e0565b610abf565b005b61046061045b366004614438565b610bbb565b60405161030f91906152f1565b61048061047b3660046142b1565b610c3e565b60405161030f9190615547565b61048061049b366004614555565b610c95565b6104b36104ae3660046149e0565b610cf2565b60405161030f939291906150bf565b6104d56104d03660046149e0565b610d2c565b60405161030f9493929190615696565b6104f86104f33660046149e0565b6115e1565b60405161030f92919061541e565b610390610514366004614c3f565b611619565b61052c6105273660046149e0565b6116a2565b60405161030f9291906150a5565b610390610548366004614511565b6116da565b6104f861055b3660046149e0565b611cc1565b61057361056e3660046149e0565b611d1e565b60405161030f9493929190615652565b6105966105913660046149e0565b611d7f565b60405161030f959493929190615441565b6103906105b5366004614b3a565b611df7565b6104606105c83660046145d7565b611e78565b6105e06105db36600461463d565b611ef1565b60405161030f919061520b565b6104806105fb3660046145ac565b611fb4565b61061361060e3660046149e0565b61200d565b60405161030f9493929190615167565b610480610631366004614486565b612049565b6106496106443660046149e0565b6120a8565b60405161030f93929190615512565b61066b6106663660046149e0565b612122565b60405161030f9291906153a8565b61039061215b565b61069461068f3660046149e0565b612161565b60405161030f94939291906154a4565b6106b76106b23660046149e0565b6121df565b60405161030f929190615689565b6104606106d3366004614438565b61222d565b6103906106e6366004614511565b61229b565b6106fe6106f9366004614a8b565b612757565b60405161030f919061563d565b6104806107193660046147e5565b612cc5565b61073161072c3660046149e0565b612ce4565b60405161030f9190615409565b61075161074c3660046146c1565b612d94565b60405161030f93929190615256565b61077361076e366004614438565b612ecc565b60405161030f929190615332565b61079461078f366004614ae3565b612ee5565b60405161030f93929190615836565b6107b66107b13660046149e0565b61311f565b60405161030f939291906155e1565b6000806107d9836107d461315c565b613180565b60006107f260048551866131c09092919063ffffffff16565b8060200190516108059190810190614993565b909350905060ff8116600681111561081957fe5b915050915091565b60008080610835848263ffffffff61320316565b92506001600160e01b0319831663012b8bc960e11b146108705760405162461bcd60e51b8152600401610867906157ff565b60405180910390fd5b61088184601063ffffffff61323716565b915061089484602463ffffffff61326a16565b929491935050565b6000806108a984846116da565b91506108b5848461229b565b90509250929050565b60008060006108cf846107d4613276565b60006108e860048651876131c09092919063ffffffff16565b8060200190516108fb9190810190614e1e565b9094509250905060ff8116600281111561091157fe5b9350509193909250565b600080600061092a858561089c565b91509150610938828261329a565b925050505b92915050565b6000606080610954846107d46132b0565b835161096a90859060049063ffffffff6131c016565b80602001905161097d9190810190614933565b9196909550909350915050565b600080610999836107d46132d4565b82516109af90849060049063ffffffff6131c016565b8060200190516109c291908101906148d5565b9094909350915050565b60008060606109dd846107d46132f8565b60006109f660048651876131c09092919063ffffffff16565b806020019051610a099190810190614dd2565b9094509250905060ff8116600181111561091157fe5b600080606080610a31856107d461331c565b8451610a4790869060049063ffffffff6131c016565b806020019051610a5a9190810190614891565b92989197509550909350915050565b600080610a78836107d4613340565b6000610a9160048551866131c09092919063ffffffff16565b806020019051610aa49190810190614d10565b9250905060ff81166003811115610ab757fe5b925050915091565b6000610ad1828263ffffffff61320316565b90506001600160e01b03198116630f47261b60e41b1415610afc57610af582611cc1565b5050610bb7565b6001600160e01b0319811663012b8bc960e11b1415610b2657610b1e82610821565b505050610bb7565b6001600160e01b0319811663a7cb5fb760e01b1415610b5257610b4882611d7f565b5050505050610bb7565b6001600160e01b031981166394cfcdd760e01b1415610b7457610b1e826120a8565b6001600160e01b0319811663619ce88560e11b1415610b9f57610b9682612161565b50505050610bb7565b60405162461bcd60e51b8152600401610867906157ff565b5050565b606060008251905080604051908082528060200260200182016040528015610bed578160200160208202803883390190505b50915060005b818114610c3657610c1785858381518110610c0a57fe5b602002602001015161229b565b838281518110610c2357fe5b6020908102919091010152600101610bf3565b505092915050565b604051606090630f47261b60e41b90610c5b908490602401615091565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915290505b919050565b60405160609063619ce88560e11b90610cb690869086908690602401615135565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915290505b9392505050565b6000806000610d03846107d4613364565b8351610d1990859060049063ffffffff6131c016565b80602001905161097d9190810190614306565b60608080806000610d43868263ffffffff61320316565b90506001600160e01b0319811663dedfc1f160e01b1415610d9b576040518060400160405280601181526020017f626174636843616e63656c4f726465727300000000000000000000000000000081525094506111e3565b6001600160e01b03198116634b4a520160e11b1415610df1576040518060400160405280600f81526020017f626174636846696c6c4f7264657273000000000000000000000000000000000081525094506111e3565b6001600160e01b031981166323aa37f960e21b1415610e47576040518060400160405280601681526020017f626174636846696c6c4f72646572734e6f5468726f770000000000000000000081525094506111e3565b6001600160e01b03198116632fbb8b8560e21b1415610e9d576040518060400160405280601581526020017f626174636846696c6c4f724b696c6c4f7264657273000000000000000000000081525094506111e3565b6001600160e01b03198116632da6298760e01b1415610ef3576040518060400160405280600b81526020017f63616e63656c4f7264657200000000000000000000000000000000000000000081525094506111e3565b6001600160e01b03198116634da26aab60e11b1415610f49576040518060400160405280600981526020017f66696c6c4f72646572000000000000000000000000000000000000000000000081525094506111e3565b6001600160e01b03198116633852d63160e21b1415610f9f576040518060400160405280600f81526020017f66696c6c4f724b696c6c4f72646572000000000000000000000000000000000081525094506111e3565b6001600160e01b031981166378d29ac160e01b1415610ff5576040518060400160405280601681526020017f6d61726b65744275794f72646572734e6f5468726f770000000000000000000081525094506111e3565b6001600160e01b0319811663369da09960e01b141561104b576040518060400160405280601781526020017f6d61726b657453656c6c4f72646572734e6f5468726f7700000000000000000081525094506111e3565b6001600160e01b03198116638bc8efb360e01b14156110a1576040518060400160405280601981526020017f6d61726b65744275794f726465727346696c6c4f724b696c6c0000000000000081525094506111e3565b6001600160e01b0319811663a6c3bf3360e01b14156110f7576040518060400160405280601a81526020017f6d61726b657453656c6c4f726465727346696c6c4f724b696c6c00000000000081525094506111e3565b6001600160e01b031981166388ec79fb60e01b141561114d576040518060400160405280600b81526020017f6d617463684f726465727300000000000000000000000000000000000000000081525094506111e3565b6001600160e01b031981167f4f9559b10000000000000000000000000000000000000000000000000000000014806111ae57506001600160e01b031981167f2280c91000000000000000000000000000000000000000000000000000000000145b156111cb5760405162461bcd60e51b815260040161086790615791565b60405162461bcd60e51b81526004016108679061575a565b6001600160e01b0319811663dedfc1f160e01b141561126f57855161121290879060049063ffffffff61338816565b806020019051611225919081019061460a565b604080516000808252602082019092529195505b5060408051600080825260208201909252919450611267565b60608152602001906001900390816112525790505b5091506115d9565b6001600160e01b03198116632fbb8b8560e21b148061129e57506001600160e01b03198116634b4a520160e11b145b806112b957506001600160e01b031981166323aa37f960e21b145b156112d3576112c786613408565b919550935091506115d9565b6001600160e01b03198116632da6298760e01b14156113a25760408051600180825281830190925290816020015b611309613be4565b815260200190600190039081611301575050865190945061133490879060049063ffffffff61338816565b8060200190516113479190810190614a58565b8460008151811061135457fe5b60200260200101819052506000604051908082528060200260200182016040528015611239578160200160208202803883390190505060408051600080825260208201909252919450611267565b6001600160e01b03198116633852d63160e21b14806113d157506001600160e01b03198116634da26aab60e11b145b156113df576112c786613437565b6001600160e01b031981166378d29ac160e01b148061140e57506001600160e01b0319811663369da09960e01b145b8061142957506001600160e01b03198116638bc8efb360e01b145b8061144457506001600160e01b0319811663a6c3bf3360e01b145b15611452576112c786613531565b6001600160e01b031981166388ec79fb60e01b14156115d957611473613be4565b61147b613be4565b60608061149560048b518c6133889092919063ffffffff16565b8060200190516114a89190810190614b93565b604080516002808252606082019092529498509296509094509250816020015b6114d0613be4565b8152602001906001900390816114c857905050975083886000815181106114f357fe5b6020026020010181905250828860018151811061150c57fe5b602090810291909101015260408051600280825260608201909252908160200160208202803883390190505096508360a001518760008151811061154c57fe5b6020026020010181815250508260a001518760018151811061156a57fe5b60209081029190910101526040805160028082526060820190925290816020015b606081526020019060019003908161158b57905050955081866000815181106115b057fe5b602002602001018190525080866001815181106115c957fe5b6020026020010181905250505050505b509193509193565b6000806115f0836107d46135a5565b825161160690849060049063ffffffff6131c016565b8060200190516109c291908101906149b7565b600061169a846116956040518060400160405280600b81526020017f30782050726f746f636f6c0000000000000000000000000000000000000000008152506040518060400160405280600581526020017f332e302e3000000000000000000000000000000000000000000000000000000081525087876135c9565b613620565b949350505050565b6000806116b1836107d4613634565b82516116c790849060049063ffffffff6131c016565b8060200190516109c291908101906142cd565b6000806116ed838263ffffffff61320316565b90506001600160e01b03198116630f47261b60e41b141561181f57600061171b84601063ffffffff61323716565b6040519091506060907f70a082310000000000000000000000000000000000000000000000000000000090611754908890602401615091565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060836001600160a01b0316836040516117a59190615075565b600060405180830381855afa9150503d80600081146117e0576040519150601f19603f3d011682016040523d82523d6000602084013e6117e5565b606091505b50915091508180156117f8575080516020145b611803576000611814565b61181481600063ffffffff61326a16565b955050505050611cba565b6001600160e01b0319811663012b8bc960e11b14156119775760008061184485610821565b6040519194509250606091507f6352211e0000000000000000000000000000000000000000000000000000000090611880908490602401615357565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060846001600160a01b0316836040516118d19190615075565b600060405180830381855afa9150503d806000811461190c576040519150601f19603f3d011682016040523d82523d6000602084013e611911565b606091505b50915091506000828015611926575081516020145b611931576000611942565b61194282600c63ffffffff61323716565b9050896001600160a01b0316816001600160a01b031614611964576000611967565b60015b60ff169750505050505050611cba565b6001600160e01b0319811663a7cb5fb760e01b1415611b1757600060608061199e86611d7f565b5081519296509094509250905060005b818114611b0d5783516060907efdd58e00000000000000000000000000000000000000000000000000000000908b908790859081106119e957fe5b6020026020010151604051602401611a0292919061519b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060876001600160a01b031683604051611a539190615075565b600060405180830381855afa9150503d8060008114611a8e576040519150601f19603f3d011682016040523d82523d6000602084013e611a93565b606091505b50915091506000828015611aa8575081516020145b611ab3576000611ac4565b611ac482600063ffffffff61326a16565b90506000878681518110611ad457fe5b60200260200101518281611ae457fe5b0490508b811080611af357508b155b15611afc57809b505b5050600190930192506119ae915050565b5050505050611cba565b6001600160e01b0319811663619ce88560e11b1415611c1c576040516060907fa85e59e40000000000000000000000000000000000000000000000000000000090611b6d9086906000908190819060240161555a565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925260045491519092506000916001600160a01b031690611bbf908490615075565b600060405180830381855afa9150503d8060008114611bfa576040519150601f19603f3d011682016040523d82523d6000602084013e611bff565b606091505b5050905080611c0f576000611c13565b6000195b93505050611cba565b6001600160e01b031981166394cfcdd760e01b1415611cba57606080611c41856120a8565b80519194509250905060005b818114611cb5576000611c7389858481518110611c6657fe5b60200260200101516116da565b90506000858381518110611c8357fe5b60200260200101518281611c9357fe5b04905087811080611ca2575087155b15611cab578097505b5050600101611c4d565b505050505b5092915050565b600080611cd4838263ffffffff61320316565b91506001600160e01b03198216630f47261b60e41b14611d065760405162461bcd60e51b8152600401610867906157ff565b611d1783601063ffffffff61323716565b9050915091565b60008060006060611d31856107d4613658565b6000611d4a60048751886131c09092919063ffffffff16565b806020019051611d5d9190810190614d74565b91965094509250905060ff81166006811115611d7557fe5b9450509193509193565b60008060608080611d96868563ffffffff61320316565b94506001600160e01b0319851663a7cb5fb760e01b14611dc85760405162461bcd60e51b8152600401610867906157ff565b505050506024828101516044840151606485015160848601519496929591820184019490820184019391010190565b600061169a84611e736040518060400160405280600b81526020017f30782050726f746f636f6c0000000000000000000000000000000000000000008152506040518060400160405280600581526020017f332e302e3000000000000000000000000000000000000000000000000000000081525087876135c9565b61367c565b6060808251604051908082528060200260200182016040528015611ea6578160200160208202803883390190505b50905060005b83518114611cba57838181518110611ec057fe5b60200260200101516001600160a01b031631828281518110611ede57fe5b6020908102919091010152600101611eac565b606060008451905080604051908082528060200260200182016040528015611f23578160200160208202803883390190505b50915060005b818114611fab57611f74868281518110611f3f57fe5b6020026020010151868381518110611f5357fe5b6020026020010151868481518110611f6757fe5b6020026020010151612757565b838281518110611f8057fe5b60200260200101906004811115611f9357fe5b90816004811115611fa057fe5b905250600101611f29565b50509392505050565b60405160609063012b8bc960e11b90611fd3908590859060240161519b565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905092915050565b60006060806060612020856107d461368b565b845161203690869060049063ffffffff6131c016565b806020019051610a5a91908101906143a0565b60405160609063a7cb5fb760e01b9061206c9087908790879087906024016150e3565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050949350505050565b60006060806120bd848463ffffffff61320316565b92506001600160e01b031983166394cfcdd760e01b146120ef5760405162461bcd60e51b8152600401610867906157ff565b835161210590859060049063ffffffff61338816565b806020019051612118919081019061481a565b9395909450915050565b60006060612132836107d46136af565b825161214890849060049063ffffffff6131c016565b8060200190516109c291908101906148f8565b60055481565b600080606081612177858263ffffffff61320316565b93506001600160e01b0319841663619ce88560e11b146121a95760405162461bcd60e51b8152600401610867906157ff565b84516121bf90869060049063ffffffff61338816565b8060200190516121d29190810190614348565b9597919650949350915050565b6000806121ee836107d46136d3565b600061220760048551866131c09092919063ffffffff16565b80602001905161221a9190810190614d10565b9250905060ff81166001811115610ab757fe5b60606000825190508060405190808252806020026020018201604052801561225f578160200160208202803883390190505b50915060005b818114610c365761227c85858381518110611c6657fe5b83828151811061228857fe5b6020908102919091010152600101612265565b6000806122ae838263ffffffff61320316565b90506001600160e01b031981166394cfcdd760e01b1415612347576060806122d5856120a8565b80519194509250905060005b81811461233c5760006122fa89858481518110610c0a57fe5b9050600085838151811061230a57fe5b6020026020010151828161231a57fe5b04905087811080612329575087155b15612332578097505b50506001016122e1565b5061093d9350505050565b6001600160e01b03198116630f47261b60e41b14156123b957600061237384601063ffffffff61323716565b6001546040519192506060917fdd62ed3e00000000000000000000000000000000000000000000000000000000916117549189916001600160a01b0316906024016150a5565b6001600160e01b0319811663012b8bc960e11b1415612605576000806123de85610821565b6002546040519295509093506060925063e985e9c560e01b91612411918a916001600160a01b03909116906024016150a5565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060846001600160a01b0316836040516124629190615075565b600060405180830381855afa9150503d806000811461249d576040519150601f19603f3d011682016040523d82523d6000602084013e6124a2565b606091505b50915091508115806124b657508051602014155b806124d257506124cd81600063ffffffff61326a16565b600114155b156125f6576040516060907f081812fc000000000000000000000000000000000000000000000000000000009061250d908790602401615357565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050856001600160a01b03168160405161255a9190615075565b600060405180830381855afa9150503d8060008114612595576040519150601f19603f3d011682016040523d82523d6000602084013e61259a565b606091505b5090935091508280156125ae575081516020145b80156125dd57506002546001600160a01b03166125d283600c63ffffffff61323716565b6001600160a01b0316145b6125e85760006125eb565b60015b60ff16975050611b0d565b60001996505050505050611cba565b6001600160e01b0319811663a7cb5fb760e01b141561273357600061262984611d7f565b50506003546040519294506060935063e985e9c560e01b9261265a925089916001600160a01b0316906024016150a5565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060836001600160a01b0316836040516126ab9190615075565b600060405180830381855afa9150503d80600081146126e6576040519150601f19603f3d011682016040523d82523d6000602084013e6126eb565b606091505b50915091508180156126fe575080516020145b801561271a575061271681600063ffffffff61326a16565b6001145b612725576000611814565b600019955050505050611cba565b6001600160e01b0319811663619ce88560e11b1415611cba57506000199392505050565b6000612761613c77565b6127f28584600660009054906101000a90046001600160a01b03166001600160a01b0316631ce4c78b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156127b457600080fd5b505afa1580156127c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506127ec9190810190614cf8565b3a6136f7565b60408051600480825260a0820190925291925060609190816020015b606081526020019060019003908161280e57505060408051600480825260a082019092529192506060919060208201608080388339505060408051600480825260a08201909252929350606092915060208201608080388339505060408051600480825260a08201909252929350606092915060208201608080388339019050509050886101600151846000815181106128a457fe5b602002602001018190525087836000815181106128bd57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508860000151826000815181106128ef57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050868160008151811061291d57fe5b6020026020010181815250508861014001518460018151811061293c57fe5b602002602001018190525088600001518360018151811061295957fe5b60200260200101906001600160a01b031690816001600160a01b031681525050878260018151811061298757fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508460000151816001815181106129b957fe5b602002602001018181525050886101a00151846002815181106129d857fe5b602002602001018190525087836002815181106129f157fe5b60200260200101906001600160a01b031690816001600160a01b031681525050886040015182600281518110612a2357fe5b60200260200101906001600160a01b031690816001600160a01b031681525050846060015181600281518110612a5557fe5b60200260200101818152505088610180015184600381518110612a7457fe5b6020026020010181905250886000015183600381518110612a9157fe5b60200260200101906001600160a01b031690816001600160a01b031681525050886040015182600381518110612ac357fe5b60200260200101906001600160a01b031690816001600160a01b031681525050846040015181600381518110612af557fe5b60209081029190910101526040516060907fb04fbddd0000000000000000000000000000000000000000000000000000000090612b3c9087908790879087906024016151b4565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925260065491519092506060916001600160a01b031690612b8e908490615075565b6000604051808303816000865af19150503d8060008114612bcb576040519150601f19603f3d011682016040523d82523d6000602084013e612bd0565b606091505b50915060009050612be7828263ffffffff61320316565b9050612bf16132f8565b6001600160e01b031982811691161415612c33576000612c10836109cc565b5091505060ff81166004811115612c2357fe5b9950505050505050505050610ceb565b612c3b6132b0565b6001600160e01b031982811691161415612c6e576000612c5a83610943565b509091505060ff81166004811115612c2357fe5b815160208301207ff43f26ea5a94b478394a975e856464913dc1a8a1ca70939d974aa7c238aa0ce01415612cad57600498505050505050505050610ceb565b60405162461bcd60e51b815260040161086790615723565b6040516060906394cfcdd760e01b90611fd39085908590602401615304565b6000612cf6828263ffffffff61320316565b90506001600160e01b03198116630f47261b60e41b1480612d2757506001600160e01b0319811663012b8bc960e11b145b80612d4257506001600160e01b0319811663a7cb5fb760e01b145b80612d5d57506001600160e01b031981166394cfcdd760e01b145b80612d7857506001600160e01b0319811663619ce88560e11b145b610c905760405162461bcd60e51b8152600401610867906157ff565b606080606060008551905080604051908082528060200260200182016040528015612dd957816020015b612dc6613ca6565b815260200190600190039081612dbe5790505b50935080604051908082528060200260200182016040528015612e06578160200160208202803883390190505b50925080604051908082528060200260200182016040528015612e33578160200160208202803883390190505b50915060005b818114612ec357612e70878281518110612e4f57fe5b6020026020010151878381518110612e6357fe5b6020026020010151612ee5565b8751889085908110612e7e57fe5b60200260200101878581518110612e9157fe5b60200260200101878681518110612ea457fe5b9315156020948502919091019093019290925291905252600101612e39565b50509250925092565b606080612ed9848461222d565b91506108b58484610bbb565b612eed613ca6565b600080546040517f9d3fa4b900000000000000000000000000000000000000000000000000000000815282916001600160a01b031690639d3fa4b990612f3790889060040161585a565b60606040518083038186803b158015612f4f57600080fd5b505afa158015612f63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612f879190810190614a13565b85516000546040517fa12dcc6f00000000000000000000000000000000000000000000000000000000815292955090916001600160a01b039091169063a12dcc6f90612fd9908990899060040161586d565b60206040518083038186803b158015612ff157600080fd5b505afa158015613005573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506130299190810190614871565b9150600061303c8288610140015161091b565b60a088015160c08901516101808a01516101408b01519394509192909160009161306b9163ffffffff61376e16565b15613098576130918461308b848d6080015161379390919063ffffffff16565b856137af565b90506130f1565b816130ac57613091848b60800151856137af565b60006130bd868c610180015161091b565b905060006130d0868d60800151876137af565b905060006130df8386886137af565b90506130eb828261329a565b93505050505b61311161310b8960400151856137d190919063ffffffff16565b8261329a565b965050505050509250925092565b6000806000613130846107d46137f0565b600061314960048651876131c09092919063ffffffff16565b8060200190516108fb9190810190614d3d565b7ffdb6ca8d0000000000000000000000000000000000000000000000000000000090565b600061318d836000613203565b90506001600160e01b0319808216908316146131bb5760405162461bcd60e51b8152600401610867906157c8565b505050565b6060818311156131de576131de6131d960008585613814565b613833565b83518211156131f7576131f76131d96001848751613814565b50819003910190815290565b60008160040183511015613224576132246131d96003855185600401613814565b5001602001516001600160e01b03191690565b60008160140183511015613258576132586131d96004855185601401613814565b5001601401516001600160a01b031690565b6000610ceb838361383b565b7f18e4b1410000000000000000000000000000000000000000000000000000000090565b60008183106132a95781610ceb565b5090919050565b7f4678472b0000000000000000000000000000000000000000000000000000000090565b7fb6555d6f0000000000000000000000000000000000000000000000000000000090565b7f488219a60000000000000000000000000000000000000000000000000000000090565b7f1b8388f70000000000000000000000000000000000000000000000000000000090565b7fe94a7ed00000000000000000000000000000000000000000000000000000000090565b7f4ad312750000000000000000000000000000000000000000000000000000000090565b6060818311156133a1576133a16131d960008585613814565b83518211156133ba576133ba6131d96001848751613814565b8282036040519080825280601f01601f1916602001820160405280156133e7576020820181803883390190505b509050610ceb6133f682613865565b8461340087613865565b01835161386b565b606080606061342460048551866133889092919063ffffffff16565b80602001905161097d9190810190614718565b60408051600180825281830190925260609182918291816020015b61345a613be4565b8152602001906001900390816134525750506040805160018082528183019092529194506020808301908038833901905050604080516001808252818301909252919350816020015b60608152602001906001900390816134a357505084519091506134d090859060049063ffffffff61338816565b8060200190516134e39190810190614bec565b856000815181106134f057fe5b602002602001018560008151811061350457fe5b602002602001018560008151811061351857fe5b6020908102919091010192909252919052529193909250565b60408051600180825281830190925260609182918291602080830190803883395050855191935061356d9186915060049063ffffffff61338816565b8060200190516135809190810190614792565b8451859060009061358d57fe5b60209081029190910101919091529095929450925050565b7f11c7b7200000000000000000000000000000000000000000000000000000000090565b8351602094850120835193850193909320604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f815295860194909452928401929092526060830152608082015260a0902090565b6000610ceb8261362f85613910565b61398b565b7fa15c0d060000000000000000000000000000000000000000000000000000000090565b7f7e5a23180000000000000000000000000000000000000000000000000000000090565b6000610ceb8261362f856139c5565b7f5bd0428d0000000000000000000000000000000000000000000000000000000090565b7f20d11f610000000000000000000000000000000000000000000000000000000090565b7ff59851840000000000000000000000000000000000000000000000000000000090565b6136ff613c77565b6020810184905260a0850151608086015161371b918691613a7e565b815260a085015160c0860151613732918691613a7e565b604082015260a085015160e086015161374c918691613a7e565b6060820152613761828463ffffffff613ab216565b6080820152949350505050565b600081518351148015610ceb5750508051602091820120825192909101919091201490565b600082820183811015610ceb57610ceb6131d960008686613adf565b600061169a836137c5868563ffffffff613ab216565b9063ffffffff613afe16565b6000828211156137ea576137ea6131d960028585613adf565b50900390565b7fe53c76c80000000000000000000000000000000000000000000000000000000090565b6060632800659560e01b848484604051602401610cb69392919061562f565b805160208201fd5b6000816020018351101561385c5761385c6131d96005855185602001613814565b50016020015190565b60200190565b6020811015613895576001816020036101000a0380198351168185511680821786525050506131bb565b828214156138a2576131bb565b828211156138dc5760208103905080820181840181515b828510156138d45784518652602095860195909401936138b9565b9052506131bb565b60208103905080820181840183515b818612156139075782518252601f1992830192909101906138eb565b85525050505050565b608081810151825160208085015160408087015160609788015186519685019690962082517fec69816980a3a3ca4554410e60253953e9ff375ba4536a98adfa15cc7154150881529485019590955290830191909152948101949094526001600160a01b039091169183019190915260a082015260c0902090565b6040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6101408101516101608201516101808301516101a08401516000937ff80322eb8376aafb64eadf8f0d7623f22130fd9491a221e902b713cb984a753493909290916020871015613a1157fe5b601f1987018051610140890180516101608b0180516101808d0180516101a08f0180519d89528c5160209d8e012087528b519b8d019b909b2084528951998c01999099208152875197909a019690962088526101e085209390945290529190529252919091529050919050565b6000613a8b848484613b28565b15613a9e57613a9e6131d9858585613b8e565b61169a836137c5868563ffffffff613ab216565b600082613ac15750600061093d565b82820282848281613ace57fe5b0414610ceb57610ceb6131d9600186865b606063e946c1bb60e01b848484604051602401610cb6939291906155c0565b600081613b1457613b146131d960038585613adf565b6000828481613b1f57fe5b04949350505050565b600082613b3a57613b3a6131d9613bad565b811580613b45575083155b15613b5257506000610ceb565b60008380613b5c57fe5b8584099050613b71858463ffffffff613ab216565b613b83826103e863ffffffff613ab216565b101595945050505050565b606063339f3de260e01b848484604051602401610cb693929190615892565b60408051808201909152600481527fa791837c00000000000000000000000000000000000000000000000000000000602082015290565b604051806101c0016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001606081525090565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b803561093d81615979565b805161093d81615979565b600082601f830112613cec578081fd5b8135613cff613cfa826158cf565b6158a8565b818152915060208083019084810181840286018201871015613d2057600080fd5b60005b84811015611cb5578135613d3681615979565b84529282019290820190600101613d23565b600082601f830112613d58578081fd5b8151613d66613cfa826158cf565b8181529150602080830190840160005b83811015613da357613d8e8760208451890101613fc8565b83526020928301929190910190600101613d76565b5050505092915050565b600082601f830112613dbd578081fd5b8135613dcb613cfa826158cf565b8181529150602080830190840160005b83811015613da357613df38760208435890101613f7a565b83526020928301929190910190600101613ddb565b600082601f830112613e18578081fd5b8151613e26613cfa826158cf565b8181529150602080830190840160005b83811015613da357613e4e876020845189010161415d565b83526020928301929190910190600101613e36565b600082601f830112613e73578081fd5b8135613e81613cfa826158cf565b8181529150602080830190840160005b83811015613da357613ea9876020843589010161400e565b83526020928301929190910190600101613e91565b600082601f830112613ece578081fd5b8151613edc613cfa826158cf565b818152915060208083019084810181840286018201871015613efd57600080fd5b60005b84811015611cb557815184529282019290820190600101613f00565b600082601f830112613f2c578081fd5b8135613f3a613cfa826158cf565b818152915060208083019084810181840286018201871015613f5b57600080fd5b60005b84811015611cb557813584529282019290820190600101613f5e565b600082601f830112613f8a578081fd5b8135613f98613cfa826158ef565b9150808252836020828501011115613faf57600080fd5b8060208401602084013760009082016020015292915050565b600082601f830112613fd8578081fd5b8151613fe6613cfa826158ef565b9150808252836020828501011115613ffd57600080fd5b611cba81602084016020860161591e565b60006101c0808385031215614021578182fd5b61402a816158a8565b9150506140378383613cc6565b81526140468360208401613cc6565b60208201526140588360408401613cc6565b604082015261406a8360608401613cc6565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e08201526101008083013581830152506101208083013581830152506101408083013567ffffffffffffffff808211156140cc57600080fd5b6140d886838701613f7a565b838501526101609250828501359150808211156140f457600080fd5b61410086838701613f7a565b8385015261018092508285013591508082111561411c57600080fd5b61412886838701613f7a565b838501526101a092508285013591508082111561414457600080fd5b5061415185828601613f7a565b82840152505092915050565b60006101c0808385031215614170578182fd5b614179816158a8565b9150506141868383613cd1565b81526141958360208401613cd1565b60208201526141a78360408401613cd1565b60408201526141b98360608401613cd1565b60608201526080820151608082015260a082015160a082015260c082015160c082015260e082015160e08201526101008083015181830152506101208083015181830152506101408083015167ffffffffffffffff8082111561421b57600080fd5b61422786838701613fc8565b8385015261016092508285015191508082111561424357600080fd5b61424f86838701613fc8565b8385015261018092508285015191508082111561426b57600080fd5b61427786838701613fc8565b838501526101a092508285015191508082111561429357600080fd5b5061415185828601613fc8565b805160ff8116811461093d57600080fd5b6000602082840312156142c2578081fd5b8135610ceb81615979565b600080604083850312156142df578081fd5b82516142ea81615979565b60208401519092506142fb81615979565b809150509250929050565b60008060006060848603121561431a578081fd5b835161432581615979565b602085015190935061433681615979565b80925050604084015190509250925092565b60008060006060848603121561435c578081fd5b835161436781615979565b602085015190935067ffffffffffffffff811115614383578182fd5b61438f86828701613fc8565b925050604084015190509250925092565b600080600080608085870312156143b5578182fd5b84516143c081615979565b602086015190945067ffffffffffffffff808211156143dd578384fd5b6143e988838901613fc8565b945060408701519150808211156143fe578384fd5b61440a88838901613fc8565b9350606087015191508082111561441f578283fd5b5061442c87828801613fc8565b91505092959194509250565b6000806040838503121561444a578182fd5b823561445581615979565b9150602083013567ffffffffffffffff811115614470578182fd5b61447c85828601613dad565b9150509250929050565b6000806000806080858703121561449b578182fd5b84356144a681615979565b9350602085013567ffffffffffffffff808211156144c2578384fd5b6144ce88838901613f1c565b945060408701359150808211156144e3578384fd5b6144ef88838901613f1c565b93506060870135915080821115614504578283fd5b5061442c87828801613f7a565b60008060408385031215614523578182fd5b823561452e81615979565b9150602083013567ffffffffffffffff811115614549578182fd5b61447c85828601613f7a565b600080600060608486031215614569578081fd5b833561457481615979565b9250602084013567ffffffffffffffff81111561458f578182fd5b61459b86828701613f7a565b925050604084013590509250925092565b600080604083850312156145be578182fd5b82356145c981615979565b946020939093013593505050565b6000602082840312156145e8578081fd5b813567ffffffffffffffff8111156145fe578182fd5b61169a84828501613cdc565b60006020828403121561461b578081fd5b815167ffffffffffffffff811115614631578182fd5b61169a84828501613e08565b600080600060608486031215614651578081fd5b833567ffffffffffffffff80821115614668578283fd5b61467487838801613e63565b94506020860135915080821115614689578283fd5b61469587838801613cdc565b935060408601359150808211156146aa578283fd5b506146b786828701613f1c565b9150509250925092565b600080604083850312156146d3578182fd5b823567ffffffffffffffff808211156146ea578384fd5b6146f686838701613e63565b9350602085013591508082111561470b578283fd5b5061447c85828601613dad565b60008060006060848603121561472c578081fd5b835167ffffffffffffffff80821115614743578283fd5b61474f87838801613e08565b94506020860151915080821115614764578283fd5b61477087838801613ebe565b93506040860151915080821115614785578283fd5b506146b786828701613d48565b6000806000606084860312156147a6578081fd5b835167ffffffffffffffff808211156147bd578283fd5b6147c987838801613e08565b9450602086015193506040860151915080821115614785578283fd5b600080604083850312156147f7578182fd5b823567ffffffffffffffff8082111561480e578384fd5b6146f686838701613f1c565b6000806040838503121561482c578182fd5b825167ffffffffffffffff80821115614843578384fd5b61484f86838701613ebe565b93506020850151915080821115614864578283fd5b5061447c85828601613d48565b600060208284031215614882578081fd5b81518015158114610ceb578182fd5b600080600080608085870312156148a6578182fd5b8451935060208501516148b881615979565b604086015190935067ffffffffffffffff808211156143fe578384fd5b600080604083850312156148e7578182fd5b505080516020909101519092909150565b6000806040838503121561490a578182fd5b82519150602083015167ffffffffffffffff811115614927578182fd5b61447c85828601613fc8565b600080600060608486031215614947578081fd5b83519250602084015167ffffffffffffffff80821115614965578283fd5b61497187838801613fc8565b93506040860151915080821115614986578283fd5b506146b786828701613fc8565b600080604083850312156149a5578182fd5b8251915060208301516142fb8161598e565b600080604083850312156149c9578182fd5b82516001600160e01b0319811681146142ea578283fd5b6000602082840312156149f1578081fd5b813567ffffffffffffffff811115614a07578182fd5b61169a84828501613f7a565b600060608284031215614a24578081fd5b614a2e60606158a8565b614a3884846142a0565b815260208301516020820152604083015160408201528091505092915050565b600060208284031215614a69578081fd5b815167ffffffffffffffff811115614a7f578182fd5b61169a8482850161415d565b600080600060608486031215614a9f578081fd5b833567ffffffffffffffff811115614ab5578182fd5b614ac18682870161400e565b9350506020840135614ad281615979565b929592945050506040919091013590565b60008060408385031215614af5578182fd5b823567ffffffffffffffff80821115614b0c578384fd5b614b188683870161400e565b93506020850135915080821115614b2d578283fd5b5061447c85828601613f7a565b600080600060608486031215614b4e578081fd5b833567ffffffffffffffff811115614b64578182fd5b614b708682870161400e565b935050602084013591506040840135614b8881615979565b809150509250925092565b60008060008060808587031215614ba8578182fd5b845167ffffffffffffffff80821115614bbf578384fd5b614bcb8883890161415d565b95506020870151915080821115614be0578384fd5b6143e98883890161415d565b600080600060608486031215614c00578081fd5b835167ffffffffffffffff80821115614c17578283fd5b614c238783880161415d565b9450602086015193506040860151915080821115614986578283fd5b600080600060608486031215614c53578081fd5b833567ffffffffffffffff80821115614c6a578283fd5b81860160a08189031215614c7c578384fd5b614c8660a06158a8565b92508035835260208101356020840152604081013560408401526060810135614cae81615979565b6060840152608081013582811115614cc4578485fd5b614cd089828401613f7a565b608085015250919450505060208401359150614cef8560408601613cc6565b90509250925092565b600060208284031215614d09578081fd5b5051919050565b60008060408385031215614d22578182fd5b8251614d2d8161598e565b6020939093015192949293505050565b600080600060608486031215614d51578081fd5b8351614d5c8161598e565b602085015160408601519194509250614b8881615979565b60008060008060808587031215614d89578182fd5b614d9386866142a0565b9350602085015192506040850151614daa81615979565b606086015190925067ffffffffffffffff811115614dc6578182fd5b61442c87828801613fc8565b600080600060608486031215614de6578081fd5b614df085856142a0565b925060208401519150604084015167ffffffffffffffff811115614e12578182fd5b6146b786828701613fc8565b600080600060608486031215614e32578081fd5b614e3c85856142a0565b925060208401519150604084015190509250925092565b6001600160a01b03169052565b6000815180845260208401935060208301825b82811015614e9a5781516001600160a01b0316865260209586019590910190600101614e73565b5093949350505050565b600081518084526020840180819550602083028101915060208501845b84811015614eef578284038852614ed9848351614f2c565b6020988901989094509190910190600101614ec1565b50919695505050505050565b6000815180845260208401935060208301825b82811015614e9a578151865260209586019590910190600101614f0e565b60008151808452614f4481602086016020860161591e565b601f01601f19169290920160200192915050565b805160ff16825260208082015190830152604090810151910152565b60006101c0614f84848451614e53565b6020830151614f966020860182614e53565b506040830151614fa96040860182614e53565b506060830151614fbc6060860182614e53565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e085015261010080840151818601525061012080840151818601525061014080840151828287015261501583870182614f2c565b915050610160915081840151858203838701526150328282614f2c565b92505050610180808401518583038287015261504e8382614f2c565b9150506101a09150818401518582038387015261506b8282614f2c565b9695505050505050565b6000825161508781846020870161591e565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60006001600160a01b0386168252608060208301526151056080830186614efb565b82810360408401526151178186614efb565b83810360608501526151298186614f2c565b98975050505050505050565b60006001600160a01b0385168252606060208301526151576060830185614f2c565b9050826040830152949350505050565b60006001600160a01b0386168252608060208301526151896080830186614f2c565b82810360408401526151178186614f2c565b6001600160a01b03929092168252602082015260400190565b6000608082526151c76080830187614ea4565b82810360208401526151d98187614e60565b83810360408501526151eb8187614e60565b91505082810360608401526152008185614efb565b979650505050505050565b602080825282518282018190526000918401906040840190835b8181101561524b576152378451615913565b835260209384019390920191600101615225565b509095945050505050565b606080825284519082018190526000906020906080840190828801845b8281101561529957615286848351614f58565b6060939093019290840190600101615273565b505050838103828501526152ad8187614efb565b84810360408601528551808252908301915082860190845b818110156152e35782511515845292840192918401916001016152c5565b509198975050505050505050565b600060208252610ceb6020830184614efb565b6000604082526153176040830185614efb565b82810360208401526153298185614ea4565b95945050505050565b6000604082526153456040830185614efb565b82810360208401526153298185614efb565b90815260200190565b60008582526001600160a01b0385166020830152608060408301526153886080830185614f2c565b82810360608401526152008185614f2c565b918252602082015260400190565b60008382526040602083015261169a6040830184614f2c565b6000848252606060208301526153da6060830185614f2c565b828103604084015261506b8185614f2c565b828152604081016153fc8361596f565b8260208301529392505050565b6001600160e01b031991909116815260200190565b6001600160e01b03199290921682526001600160a01b0316602082015260400190565b60006001600160e01b0319871682526001600160a01b038616602083015260a0604083015261547360a0830186614efb565b82810360608401526154858186614efb565b83810360808501526154978186614f2c565b9998505050505050505050565b60006001600160e01b0319861682526001600160a01b0385166020830152608060408301526154d66080830185614f2c565b905082606083015295945050505050565b6001600160e01b03199390931683526001600160a01b03919091166020830152604082015260600190565b60006001600160e01b031985168252606060208301526155356060830185614efb565b828103604084015261506b8185614ea4565b600060208252610ceb6020830184614f2c565b60006080825261556d6080830187614f2c565b6001600160a01b03958616602084015293909416604082015260ff9190911660609091015292915050565b60006155a38561594e565b848252836020830152606060408301526153296060830184614f2c565b606081016155cd8561595b565b938152602081019290925260409091015290565b606081016155ee85615965565b93815260208101929092526001600160a01b031660409091015290565b604081016156188461595b565b9281526020015290565b606081016155cd85615965565b60608101600885106155cd57fe5b6020810161564a83615913565b825292915050565b600061565d8661596f565b8582528460208301526001600160a01b03841660408301526080606083015261506b6080830184614f2c565b604081016156188461594e565b6000608082526156a96080830187614f2c565b602083820381850152818751808452828401915082838202850101838a01865b838110156156f757601f198784030185526156e5838351614f74565b948601949250908501906001016156c9565b5050868103604088015261570b818a614efb565b94505050505082810360608401526152008185614ea4565b60208082526013908201527f554e4b4e4f574e5f52455455524e5f4441544100000000000000000000000000604082015260600190565b60208082526019908201527f554e4b4e4f574e5f46554e4354494f4e5f53454c4543544f5200000000000000604082015260600190565b6020808252600d908201527f554e494d504c454d454e54454400000000000000000000000000000000000000604082015260600190565b6020808252600c908201527f4241445f53454c4543544f520000000000000000000000000000000000000000604082015260600190565b6020808252600e908201527f57524f4e475f50524f58595f4944000000000000000000000000000000000000604082015260600190565b60a081016158448286614f58565b8360608301528215156080830152949350505050565b600060208252610ceb6020830184614f74565b6000604082526158806040830185614f74565b82810360208401526153298185614f2c565b9283526020830191909152604082015260600190565b60405181810167ffffffffffffffff811182821017156158c757600080fd5b604052919050565b600067ffffffffffffffff8211156158e5578081fd5b5060209081020190565b600067ffffffffffffffff821115615905578081fd5b50601f01601f191660200190565b8060058110610c9057fe5b60005b83811015615939578181015183820152602001615921565b83811115615948576000848401525b50505050565b6002811061595857fe5b50565b6004811061595857fe5b6003811061595857fe5b6007811061595857fe5b6001600160a01b038116811461595857600080fd5b60ff8116811461595857600080fdfea365627a7a72315820a90c93bc636cf863e6e16fc0c4b6869195e557e923eae128ff96ab4e690fc54f6c6578706572696d656e74616cf564736f6c634300050d0040" + "object": "0x608060405234801561001057600080fd5b50600436106102e95760003560e01c80639a7e752611610191578063ca49f47c116100e3578063d3d862d111610097578063e4e6e7da11610071578063e4e6e7da14610760578063e77286eb14610781578063ee4f5a94146107a3576102e9565b8063d3d862d11461070b578063d46950281461071e578063e25cabf71461073e576102e9565b8063d001c5dc116100c8578063d001c5dc146106c5578063d186037f146106d8578063d3637905146106eb576102e9565b8063ca49f47c14610681578063cafd3a07146106a4576102e9565b8063a6627e9f11610145578063bbb2dcf61161011f578063bbb2dcf614610636578063bc03f96414610658578063c26cfecd14610679576102e9565b8063a6627e9f146105ed578063acaedc7414610600578063b43cffe114610623576102e9565b8063a070cac811610176578063a070cac8146105a7578063a0901e51146105ba578063a5cd62ba146105cd576102e9565b80639a7e7526146105605780639eadc83514610583576102e9565b806346eb65cb1161024a5780636f83188e116101fe5780637b66ad34116101d85780637b66ad34146105195780637d7275121461053a5780638f4ce4791461054d576102e9565b80636f83188e146104c25780637914b2ec146104e557806379c9c42614610506576102e9565b8063590aa8751161022f578063590aa8751461046d57806363eb39921461048d57806365129042146104a0576102e9565b806346eb65cb146104385780634dfdac201461044d576102e9565b8063314853ff116102a157806332aae3ad1161028657806332aae3ad146103d25780633db6dc61146103f4578063459be5e214610417576102e9565b8063314853ff1461039d578063327d3054146103bf576102e9565b80630d7b7d76116102d25780630d7b7d761461033a578063165979e11461035b5780632322cf761461037d576102e9565b806302d0aec3146102ee57806304a5618a14610318575b600080fd5b6103016102fc3660046149e0565b6107c5565b60405161030f9291906153ec565b60405180910390f35b61032b6103263660046149e0565b610821565b60405161030f939291906154e7565b61034d610348366004614511565b61089c565b60405161030f92919061539a565b61036e6103693660046149e0565b6108be565b60405161030f93929190615622565b61039061038b366004614511565b61091b565b60405161030f9190615357565b6103b06103ab3660046149e0565b610943565b60405161030f939291906153c1565b61034d6103cd3660046149e0565b61098a565b6103e56103e03660046149e0565b6109cc565b60405161030f93929190615598565b6104076104023660046149e0565b610a1f565b60405161030f9493929190615360565b61042a6104253660046149e0565b610a69565b60405161030f92919061560b565b61044b6104463660046149e0565b610abf565b005b61046061045b366004614438565b610bbb565b60405161030f91906152f1565b61048061047b3660046142b1565b610c3e565b60405161030f9190615547565b61048061049b366004614555565b610c95565b6104b36104ae3660046149e0565b610cf2565b60405161030f939291906150bf565b6104d56104d03660046149e0565b610d2c565b60405161030f9493929190615696565b6104f86104f33660046149e0565b6115e1565b60405161030f92919061541e565b610390610514366004614c3f565b611619565b61052c6105273660046149e0565b6116a2565b60405161030f9291906150a5565b610390610548366004614511565b6116da565b6104f861055b3660046149e0565b611cc1565b61057361056e3660046149e0565b611d1e565b60405161030f9493929190615652565b6105966105913660046149e0565b611d7f565b60405161030f959493929190615441565b6103906105b5366004614b3a565b611df7565b6104606105c83660046145d7565b611e78565b6105e06105db36600461463d565b611ef1565b60405161030f919061520b565b6104806105fb3660046145ac565b611fb4565b61061361060e3660046149e0565b61200d565b60405161030f9493929190615167565b610480610631366004614486565b612049565b6106496106443660046149e0565b6120a8565b60405161030f93929190615512565b61066b6106663660046149e0565b612122565b60405161030f9291906153a8565b61039061215b565b61069461068f3660046149e0565b612161565b60405161030f94939291906154a4565b6106b76106b23660046149e0565b6121df565b60405161030f929190615689565b6104606106d3366004614438565b61222d565b6103906106e6366004614511565b61229b565b6106fe6106f9366004614a8b565b612757565b60405161030f919061563d565b6104806107193660046147e5565b612cc5565b61073161072c3660046149e0565b612ce4565b60405161030f9190615409565b61075161074c3660046146c1565b612d94565b60405161030f93929190615256565b61077361076e366004614438565b612ecc565b60405161030f929190615332565b61079461078f366004614ae3565b612ee5565b60405161030f93929190615836565b6107b66107b13660046149e0565b61311f565b60405161030f939291906155e1565b6000806107d9836107d461315c565b613180565b60006107f260048551866131c09092919063ffffffff16565b8060200190516108059190810190614993565b909350905060ff8116600681111561081957fe5b915050915091565b60008080610835848263ffffffff61320316565b92506001600160e01b0319831663012b8bc960e11b146108705760405162461bcd60e51b8152600401610867906157ff565b60405180910390fd5b61088184601063ffffffff61323716565b915061089484602463ffffffff61326a16565b929491935050565b6000806108a984846116da565b91506108b5848461229b565b90509250929050565b60008060006108cf846107d4613276565b60006108e860048651876131c09092919063ffffffff16565b8060200190516108fb9190810190614e1e565b9094509250905060ff8116600281111561091157fe5b9350509193909250565b600080600061092a858561089c565b91509150610938828261329a565b925050505b92915050565b6000606080610954846107d46132b0565b835161096a90859060049063ffffffff6131c016565b80602001905161097d9190810190614933565b9196909550909350915050565b600080610999836107d46132d4565b82516109af90849060049063ffffffff6131c016565b8060200190516109c291908101906148d5565b9094909350915050565b60008060606109dd846107d46132f8565b60006109f660048651876131c09092919063ffffffff16565b806020019051610a099190810190614dd2565b9094509250905060ff8116600181111561091157fe5b600080606080610a31856107d461331c565b8451610a4790869060049063ffffffff6131c016565b806020019051610a5a9190810190614891565b92989197509550909350915050565b600080610a78836107d4613340565b6000610a9160048551866131c09092919063ffffffff16565b806020019051610aa49190810190614d10565b9250905060ff81166003811115610ab757fe5b925050915091565b6000610ad1828263ffffffff61320316565b90506001600160e01b03198116630f47261b60e41b1415610afc57610af582611cc1565b5050610bb7565b6001600160e01b0319811663012b8bc960e11b1415610b2657610b1e82610821565b505050610bb7565b6001600160e01b0319811663a7cb5fb760e01b1415610b5257610b4882611d7f565b5050505050610bb7565b6001600160e01b031981166394cfcdd760e01b1415610b7457610b1e826120a8565b6001600160e01b0319811663619ce88560e11b1415610b9f57610b9682612161565b50505050610bb7565b60405162461bcd60e51b8152600401610867906157ff565b5050565b606060008251905080604051908082528060200260200182016040528015610bed578160200160208202803883390190505b50915060005b818114610c3657610c1785858381518110610c0a57fe5b602002602001015161229b565b838281518110610c2357fe5b6020908102919091010152600101610bf3565b505092915050565b604051606090630f47261b60e41b90610c5b908490602401615091565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915290505b919050565b60405160609063619ce88560e11b90610cb690869086908690602401615135565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915290505b9392505050565b6000806000610d03846107d4613364565b8351610d1990859060049063ffffffff6131c016565b80602001905161097d9190810190614306565b60608080806000610d43868263ffffffff61320316565b90506001600160e01b0319811663dedfc1f160e01b1415610d9b576040518060400160405280601181526020017f626174636843616e63656c4f726465727300000000000000000000000000000081525094506111e3565b6001600160e01b03198116634b4a520160e11b1415610df1576040518060400160405280600f81526020017f626174636846696c6c4f7264657273000000000000000000000000000000000081525094506111e3565b6001600160e01b031981166323aa37f960e21b1415610e47576040518060400160405280601681526020017f626174636846696c6c4f72646572734e6f5468726f770000000000000000000081525094506111e3565b6001600160e01b03198116632fbb8b8560e21b1415610e9d576040518060400160405280601581526020017f626174636846696c6c4f724b696c6c4f7264657273000000000000000000000081525094506111e3565b6001600160e01b03198116632da6298760e01b1415610ef3576040518060400160405280600b81526020017f63616e63656c4f7264657200000000000000000000000000000000000000000081525094506111e3565b6001600160e01b03198116634da26aab60e11b1415610f49576040518060400160405280600981526020017f66696c6c4f72646572000000000000000000000000000000000000000000000081525094506111e3565b6001600160e01b03198116633852d63160e21b1415610f9f576040518060400160405280600f81526020017f66696c6c4f724b696c6c4f72646572000000000000000000000000000000000081525094506111e3565b6001600160e01b031981166378d29ac160e01b1415610ff5576040518060400160405280601681526020017f6d61726b65744275794f72646572734e6f5468726f770000000000000000000081525094506111e3565b6001600160e01b0319811663369da09960e01b141561104b576040518060400160405280601781526020017f6d61726b657453656c6c4f72646572734e6f5468726f7700000000000000000081525094506111e3565b6001600160e01b03198116638bc8efb360e01b14156110a1576040518060400160405280601981526020017f6d61726b65744275794f726465727346696c6c4f724b696c6c0000000000000081525094506111e3565b6001600160e01b0319811663a6c3bf3360e01b14156110f7576040518060400160405280601a81526020017f6d61726b657453656c6c4f726465727346696c6c4f724b696c6c00000000000081525094506111e3565b6001600160e01b031981166388ec79fb60e01b141561114d576040518060400160405280600b81526020017f6d617463684f726465727300000000000000000000000000000000000000000081525094506111e3565b6001600160e01b031981167f4f9559b10000000000000000000000000000000000000000000000000000000014806111ae57506001600160e01b031981167f2280c91000000000000000000000000000000000000000000000000000000000145b156111cb5760405162461bcd60e51b815260040161086790615791565b60405162461bcd60e51b81526004016108679061575a565b6001600160e01b0319811663dedfc1f160e01b141561126f57855161121290879060049063ffffffff61338816565b806020019051611225919081019061460a565b604080516000808252602082019092529195505b5060408051600080825260208201909252919450611267565b60608152602001906001900390816112525790505b5091506115d9565b6001600160e01b03198116632fbb8b8560e21b148061129e57506001600160e01b03198116634b4a520160e11b145b806112b957506001600160e01b031981166323aa37f960e21b145b156112d3576112c786613408565b919550935091506115d9565b6001600160e01b03198116632da6298760e01b14156113a25760408051600180825281830190925290816020015b611309613be4565b815260200190600190039081611301575050865190945061133490879060049063ffffffff61338816565b8060200190516113479190810190614a58565b8460008151811061135457fe5b60200260200101819052506000604051908082528060200260200182016040528015611239578160200160208202803883390190505060408051600080825260208201909252919450611267565b6001600160e01b03198116633852d63160e21b14806113d157506001600160e01b03198116634da26aab60e11b145b156113df576112c786613437565b6001600160e01b031981166378d29ac160e01b148061140e57506001600160e01b0319811663369da09960e01b145b8061142957506001600160e01b03198116638bc8efb360e01b145b8061144457506001600160e01b0319811663a6c3bf3360e01b145b15611452576112c786613531565b6001600160e01b031981166388ec79fb60e01b14156115d957611473613be4565b61147b613be4565b60608061149560048b518c6133889092919063ffffffff16565b8060200190516114a89190810190614b93565b604080516002808252606082019092529498509296509094509250816020015b6114d0613be4565b8152602001906001900390816114c857905050975083886000815181106114f357fe5b6020026020010181905250828860018151811061150c57fe5b602090810291909101015260408051600280825260608201909252908160200160208202803883390190505096508360a001518760008151811061154c57fe5b6020026020010181815250508260a001518760018151811061156a57fe5b60209081029190910101526040805160028082526060820190925290816020015b606081526020019060019003908161158b57905050955081866000815181106115b057fe5b602002602001018190525080866001815181106115c957fe5b6020026020010181905250505050505b509193509193565b6000806115f0836107d46135a5565b825161160690849060049063ffffffff6131c016565b8060200190516109c291908101906149b7565b600061169a846116956040518060400160405280600b81526020017f30782050726f746f636f6c0000000000000000000000000000000000000000008152506040518060400160405280600581526020017f332e302e3000000000000000000000000000000000000000000000000000000081525087876135c9565b613620565b949350505050565b6000806116b1836107d4613634565b82516116c790849060049063ffffffff6131c016565b8060200190516109c291908101906142cd565b6000806116ed838263ffffffff61320316565b90506001600160e01b03198116630f47261b60e41b141561181f57600061171b84601063ffffffff61323716565b6040519091506060907f70a082310000000000000000000000000000000000000000000000000000000090611754908890602401615091565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060836001600160a01b0316836040516117a59190615075565b600060405180830381855afa9150503d80600081146117e0576040519150601f19603f3d011682016040523d82523d6000602084013e6117e5565b606091505b50915091508180156117f8575080516020145b611803576000611814565b61181481600063ffffffff61326a16565b955050505050611cba565b6001600160e01b0319811663012b8bc960e11b14156119775760008061184485610821565b6040519194509250606091507f6352211e0000000000000000000000000000000000000000000000000000000090611880908490602401615357565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060846001600160a01b0316836040516118d19190615075565b600060405180830381855afa9150503d806000811461190c576040519150601f19603f3d011682016040523d82523d6000602084013e611911565b606091505b50915091506000828015611926575081516020145b611931576000611942565b61194282600c63ffffffff61323716565b9050896001600160a01b0316816001600160a01b031614611964576000611967565b60015b60ff169750505050505050611cba565b6001600160e01b0319811663a7cb5fb760e01b1415611b1757600060608061199e86611d7f565b5081519296509094509250905060005b818114611b0d5783516060907efdd58e00000000000000000000000000000000000000000000000000000000908b908790859081106119e957fe5b6020026020010151604051602401611a0292919061519b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060876001600160a01b031683604051611a539190615075565b600060405180830381855afa9150503d8060008114611a8e576040519150601f19603f3d011682016040523d82523d6000602084013e611a93565b606091505b50915091506000828015611aa8575081516020145b611ab3576000611ac4565b611ac482600063ffffffff61326a16565b90506000878681518110611ad457fe5b60200260200101518281611ae457fe5b0490508b811080611af357508b155b15611afc57809b505b5050600190930192506119ae915050565b5050505050611cba565b6001600160e01b0319811663619ce88560e11b1415611c1c576040516060907fa85e59e40000000000000000000000000000000000000000000000000000000090611b6d9086906000908190819060240161555a565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925260045491519092506000916001600160a01b031690611bbf908490615075565b600060405180830381855afa9150503d8060008114611bfa576040519150601f19603f3d011682016040523d82523d6000602084013e611bff565b606091505b5050905080611c0f576000611c13565b6000195b93505050611cba565b6001600160e01b031981166394cfcdd760e01b1415611cba57606080611c41856120a8565b80519194509250905060005b818114611cb5576000611c7389858481518110611c6657fe5b60200260200101516116da565b90506000858381518110611c8357fe5b60200260200101518281611c9357fe5b04905087811080611ca2575087155b15611cab578097505b5050600101611c4d565b505050505b5092915050565b600080611cd4838263ffffffff61320316565b91506001600160e01b03198216630f47261b60e41b14611d065760405162461bcd60e51b8152600401610867906157ff565b611d1783601063ffffffff61323716565b9050915091565b60008060006060611d31856107d4613658565b6000611d4a60048751886131c09092919063ffffffff16565b806020019051611d5d9190810190614d74565b91965094509250905060ff81166006811115611d7557fe5b9450509193509193565b60008060608080611d96868563ffffffff61320316565b94506001600160e01b0319851663a7cb5fb760e01b14611dc85760405162461bcd60e51b8152600401610867906157ff565b505050506024828101516044840151606485015160848601519496929591820184019490820184019391010190565b600061169a84611e736040518060400160405280600b81526020017f30782050726f746f636f6c0000000000000000000000000000000000000000008152506040518060400160405280600581526020017f332e302e3000000000000000000000000000000000000000000000000000000081525087876135c9565b61367c565b6060808251604051908082528060200260200182016040528015611ea6578160200160208202803883390190505b50905060005b83518114611cba57838181518110611ec057fe5b60200260200101516001600160a01b031631828281518110611ede57fe5b6020908102919091010152600101611eac565b606060008451905080604051908082528060200260200182016040528015611f23578160200160208202803883390190505b50915060005b818114611fab57611f74868281518110611f3f57fe5b6020026020010151868381518110611f5357fe5b6020026020010151868481518110611f6757fe5b6020026020010151612757565b838281518110611f8057fe5b60200260200101906004811115611f9357fe5b90816004811115611fa057fe5b905250600101611f29565b50509392505050565b60405160609063012b8bc960e11b90611fd3908590859060240161519b565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905092915050565b60006060806060612020856107d461368b565b845161203690869060049063ffffffff6131c016565b806020019051610a5a91908101906143a0565b60405160609063a7cb5fb760e01b9061206c9087908790879087906024016150e3565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050949350505050565b60006060806120bd848463ffffffff61320316565b92506001600160e01b031983166394cfcdd760e01b146120ef5760405162461bcd60e51b8152600401610867906157ff565b835161210590859060049063ffffffff61338816565b806020019051612118919081019061481a565b9395909450915050565b60006060612132836107d46136af565b825161214890849060049063ffffffff6131c016565b8060200190516109c291908101906148f8565b60055481565b600080606081612177858263ffffffff61320316565b93506001600160e01b0319841663619ce88560e11b146121a95760405162461bcd60e51b8152600401610867906157ff565b84516121bf90869060049063ffffffff61338816565b8060200190516121d29190810190614348565b9597919650949350915050565b6000806121ee836107d46136d3565b600061220760048551866131c09092919063ffffffff16565b80602001905161221a9190810190614d10565b9250905060ff81166001811115610ab757fe5b60606000825190508060405190808252806020026020018201604052801561225f578160200160208202803883390190505b50915060005b818114610c365761227c85858381518110611c6657fe5b83828151811061228857fe5b6020908102919091010152600101612265565b6000806122ae838263ffffffff61320316565b90506001600160e01b031981166394cfcdd760e01b1415612347576060806122d5856120a8565b80519194509250905060005b81811461233c5760006122fa89858481518110610c0a57fe5b9050600085838151811061230a57fe5b6020026020010151828161231a57fe5b04905087811080612329575087155b15612332578097505b50506001016122e1565b5061093d9350505050565b6001600160e01b03198116630f47261b60e41b14156123b957600061237384601063ffffffff61323716565b6001546040519192506060917fdd62ed3e00000000000000000000000000000000000000000000000000000000916117549189916001600160a01b0316906024016150a5565b6001600160e01b0319811663012b8bc960e11b1415612605576000806123de85610821565b6002546040519295509093506060925063e985e9c560e01b91612411918a916001600160a01b03909116906024016150a5565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060846001600160a01b0316836040516124629190615075565b600060405180830381855afa9150503d806000811461249d576040519150601f19603f3d011682016040523d82523d6000602084013e6124a2565b606091505b50915091508115806124b657508051602014155b806124d257506124cd81600063ffffffff61326a16565b600114155b156125f6576040516060907f081812fc000000000000000000000000000000000000000000000000000000009061250d908790602401615357565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050856001600160a01b03168160405161255a9190615075565b600060405180830381855afa9150503d8060008114612595576040519150601f19603f3d011682016040523d82523d6000602084013e61259a565b606091505b5090935091508280156125ae575081516020145b80156125dd57506002546001600160a01b03166125d283600c63ffffffff61323716565b6001600160a01b0316145b6125e85760006125eb565b60015b60ff16975050611b0d565b60001996505050505050611cba565b6001600160e01b0319811663a7cb5fb760e01b141561273357600061262984611d7f565b50506003546040519294506060935063e985e9c560e01b9261265a925089916001600160a01b0316906024016150a5565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060836001600160a01b0316836040516126ab9190615075565b600060405180830381855afa9150503d80600081146126e6576040519150601f19603f3d011682016040523d82523d6000602084013e6126eb565b606091505b50915091508180156126fe575080516020145b801561271a575061271681600063ffffffff61326a16565b6001145b612725576000611814565b600019955050505050611cba565b6001600160e01b0319811663619ce88560e11b1415611cba57506000199392505050565b6000612761613c77565b6127f28584600660009054906101000a90046001600160a01b03166001600160a01b0316631ce4c78b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156127b457600080fd5b505afa1580156127c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506127ec9190810190614cf8565b3a6136f7565b60408051600480825260a0820190925291925060609190816020015b606081526020019060019003908161280e57505060408051600480825260a082019092529192506060919060208201608080388339505060408051600480825260a08201909252929350606092915060208201608080388339505060408051600480825260a08201909252929350606092915060208201608080388339019050509050886101600151846000815181106128a457fe5b602002602001018190525087836000815181106128bd57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508860000151826000815181106128ef57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050868160008151811061291d57fe5b6020026020010181815250508861014001518460018151811061293c57fe5b602002602001018190525088600001518360018151811061295957fe5b60200260200101906001600160a01b031690816001600160a01b031681525050878260018151811061298757fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508460000151816001815181106129b957fe5b602002602001018181525050886101a00151846002815181106129d857fe5b602002602001018190525087836002815181106129f157fe5b60200260200101906001600160a01b031690816001600160a01b031681525050886040015182600281518110612a2357fe5b60200260200101906001600160a01b031690816001600160a01b031681525050846060015181600281518110612a5557fe5b60200260200101818152505088610180015184600381518110612a7457fe5b6020026020010181905250886000015183600381518110612a9157fe5b60200260200101906001600160a01b031690816001600160a01b031681525050886040015182600381518110612ac357fe5b60200260200101906001600160a01b031690816001600160a01b031681525050846040015181600381518110612af557fe5b60209081029190910101526040516060907fb04fbddd0000000000000000000000000000000000000000000000000000000090612b3c9087908790879087906024016151b4565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925260065491519092506060916001600160a01b031690612b8e908490615075565b6000604051808303816000865af19150503d8060008114612bcb576040519150601f19603f3d011682016040523d82523d6000602084013e612bd0565b606091505b50915060009050612be7828263ffffffff61320316565b9050612bf16132f8565b6001600160e01b031982811691161415612c33576000612c10836109cc565b5091505060ff81166004811115612c2357fe5b9950505050505050505050610ceb565b612c3b6132b0565b6001600160e01b031982811691161415612c6e576000612c5a83610943565b509091505060ff81166004811115612c2357fe5b815160208301207ff43f26ea5a94b478394a975e856464913dc1a8a1ca70939d974aa7c238aa0ce01415612cad57600498505050505050505050610ceb565b60405162461bcd60e51b815260040161086790615723565b6040516060906394cfcdd760e01b90611fd39085908590602401615304565b6000612cf6828263ffffffff61320316565b90506001600160e01b03198116630f47261b60e41b1480612d2757506001600160e01b0319811663012b8bc960e11b145b80612d4257506001600160e01b0319811663a7cb5fb760e01b145b80612d5d57506001600160e01b031981166394cfcdd760e01b145b80612d7857506001600160e01b0319811663619ce88560e11b145b610c905760405162461bcd60e51b8152600401610867906157ff565b606080606060008551905080604051908082528060200260200182016040528015612dd957816020015b612dc6613ca6565b815260200190600190039081612dbe5790505b50935080604051908082528060200260200182016040528015612e06578160200160208202803883390190505b50925080604051908082528060200260200182016040528015612e33578160200160208202803883390190505b50915060005b818114612ec357612e70878281518110612e4f57fe5b6020026020010151878381518110612e6357fe5b6020026020010151612ee5565b8751889085908110612e7e57fe5b60200260200101878581518110612e9157fe5b60200260200101878681518110612ea457fe5b9315156020948502919091019093019290925291905252600101612e39565b50509250925092565b606080612ed9848461222d565b91506108b58484610bbb565b612eed613ca6565b600080546040517f9d3fa4b900000000000000000000000000000000000000000000000000000000815282916001600160a01b031690639d3fa4b990612f3790889060040161585a565b60606040518083038186803b158015612f4f57600080fd5b505afa158015612f63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612f879190810190614a13565b85516000546040517fa12dcc6f00000000000000000000000000000000000000000000000000000000815292955090916001600160a01b039091169063a12dcc6f90612fd9908990899060040161586d565b60206040518083038186803b158015612ff157600080fd5b505afa158015613005573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506130299190810190614871565b9150600061303c8288610140015161091b565b60a088015160c08901516101808a01516101408b01519394509192909160009161306b9163ffffffff61376e16565b15613098576130918461308b848d6080015161379390919063ffffffff16565b856137af565b90506130f1565b816130ac57613091848b60800151856137af565b60006130bd868c610180015161091b565b905060006130d0868d60800151876137af565b905060006130df8386886137af565b90506130eb828261329a565b93505050505b61311161310b8960400151856137d190919063ffffffff16565b8261329a565b965050505050509250925092565b6000806000613130846107d46137f0565b600061314960048651876131c09092919063ffffffff16565b8060200190516108fb9190810190614d3d565b7ffdb6ca8d0000000000000000000000000000000000000000000000000000000090565b600061318d836000613203565b90506001600160e01b0319808216908316146131bb5760405162461bcd60e51b8152600401610867906157c8565b505050565b6060818311156131de576131de6131d960008585613814565b613833565b83518211156131f7576131f76131d96001848751613814565b50819003910190815290565b60008160040183511015613224576132246131d96003855185600401613814565b5001602001516001600160e01b03191690565b60008160140183511015613258576132586131d96004855185601401613814565b5001601401516001600160a01b031690565b6000610ceb838361383b565b7f18e4b1410000000000000000000000000000000000000000000000000000000090565b60008183106132a95781610ceb565b5090919050565b7f4678472b0000000000000000000000000000000000000000000000000000000090565b7fb6555d6f0000000000000000000000000000000000000000000000000000000090565b7f488219a60000000000000000000000000000000000000000000000000000000090565b7f1b8388f70000000000000000000000000000000000000000000000000000000090565b7fe94a7ed00000000000000000000000000000000000000000000000000000000090565b7f4ad312750000000000000000000000000000000000000000000000000000000090565b6060818311156133a1576133a16131d960008585613814565b83518211156133ba576133ba6131d96001848751613814565b8282036040519080825280601f01601f1916602001820160405280156133e7576020820181803883390190505b509050610ceb6133f682613865565b8461340087613865565b01835161386b565b606080606061342460048551866133889092919063ffffffff16565b80602001905161097d9190810190614718565b60408051600180825281830190925260609182918291816020015b61345a613be4565b8152602001906001900390816134525750506040805160018082528183019092529194506020808301908038833901905050604080516001808252818301909252919350816020015b60608152602001906001900390816134a357505084519091506134d090859060049063ffffffff61338816565b8060200190516134e39190810190614bec565b856000815181106134f057fe5b602002602001018560008151811061350457fe5b602002602001018560008151811061351857fe5b6020908102919091010192909252919052529193909250565b60408051600180825281830190925260609182918291602080830190803883395050855191935061356d9186915060049063ffffffff61338816565b8060200190516135809190810190614792565b8451859060009061358d57fe5b60209081029190910101919091529095929450925050565b7f11c7b7200000000000000000000000000000000000000000000000000000000090565b8351602094850120835193850193909320604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f815295860194909452928401929092526060830152608082015260a0902090565b6000610ceb8261362f85613910565b61398b565b7fa15c0d060000000000000000000000000000000000000000000000000000000090565b7f7e5a23180000000000000000000000000000000000000000000000000000000090565b6000610ceb8261362f856139c5565b7f5bd0428d0000000000000000000000000000000000000000000000000000000090565b7f20d11f610000000000000000000000000000000000000000000000000000000090565b7ff59851840000000000000000000000000000000000000000000000000000000090565b6136ff613c77565b6020810184905260a0850151608086015161371b918691613a7e565b815260a085015160c0860151613732918691613a7e565b604082015260a085015160e086015161374c918691613a7e565b6060820152613761828463ffffffff613ab216565b6080820152949350505050565b600081518351148015610ceb5750508051602091820120825192909101919091201490565b600082820183811015610ceb57610ceb6131d960008686613adf565b600061169a836137c5868563ffffffff613ab216565b9063ffffffff613afe16565b6000828211156137ea576137ea6131d960028585613adf565b50900390565b7fe53c76c80000000000000000000000000000000000000000000000000000000090565b6060632800659560e01b848484604051602401610cb69392919061562f565b805160208201fd5b6000816020018351101561385c5761385c6131d96005855185602001613814565b50016020015190565b60200190565b6020811015613895576001816020036101000a0380198351168185511680821786525050506131bb565b828214156138a2576131bb565b828211156138dc5760208103905080820181840181515b828510156138d45784518652602095860195909401936138b9565b9052506131bb565b60208103905080820181840183515b818612156139075782518252601f1992830192909101906138eb565b85525050505050565b608081810151825160208085015160408087015160609788015186519685019690962082517fec69816980a3a3ca4554410e60253953e9ff375ba4536a98adfa15cc7154150881529485019590955290830191909152948101949094526001600160a01b039091169183019190915260a082015260c0902090565b6040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6101408101516101608201516101808301516101a08401516000937ff80322eb8376aafb64eadf8f0d7623f22130fd9491a221e902b713cb984a753493909290916020871015613a1157fe5b601f1987018051610140890180516101608b0180516101808d0180516101a08f0180519d89528c5160209d8e012087528b519b8d019b909b2084528951998c01999099208152875197909a019690962088526101e085209390945290529190529252919091529050919050565b6000613a8b848484613b28565b15613a9e57613a9e6131d9858585613b8e565b61169a836137c5868563ffffffff613ab216565b600082613ac15750600061093d565b82820282848281613ace57fe5b0414610ceb57610ceb6131d9600186865b606063e946c1bb60e01b848484604051602401610cb6939291906155c0565b600081613b1457613b146131d960038585613adf565b6000828481613b1f57fe5b04949350505050565b600082613b3a57613b3a6131d9613bad565b811580613b45575083155b15613b5257506000610ceb565b60008380613b5c57fe5b8584099050613b71858463ffffffff613ab216565b613b83826103e863ffffffff613ab216565b101595945050505050565b606063339f3de260e01b848484604051602401610cb693929190615892565b60408051808201909152600481527fa791837c00000000000000000000000000000000000000000000000000000000602082015290565b604051806101c0016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001606081525090565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b803561093d81615979565b805161093d81615979565b600082601f830112613cec578081fd5b8135613cff613cfa826158cf565b6158a8565b818152915060208083019084810181840286018201871015613d2057600080fd5b60005b84811015611cb5578135613d3681615979565b84529282019290820190600101613d23565b600082601f830112613d58578081fd5b8151613d66613cfa826158cf565b8181529150602080830190840160005b83811015613da357613d8e8760208451890101613fc8565b83526020928301929190910190600101613d76565b5050505092915050565b600082601f830112613dbd578081fd5b8135613dcb613cfa826158cf565b8181529150602080830190840160005b83811015613da357613df38760208435890101613f7a565b83526020928301929190910190600101613ddb565b600082601f830112613e18578081fd5b8151613e26613cfa826158cf565b8181529150602080830190840160005b83811015613da357613e4e876020845189010161415d565b83526020928301929190910190600101613e36565b600082601f830112613e73578081fd5b8135613e81613cfa826158cf565b8181529150602080830190840160005b83811015613da357613ea9876020843589010161400e565b83526020928301929190910190600101613e91565b600082601f830112613ece578081fd5b8151613edc613cfa826158cf565b818152915060208083019084810181840286018201871015613efd57600080fd5b60005b84811015611cb557815184529282019290820190600101613f00565b600082601f830112613f2c578081fd5b8135613f3a613cfa826158cf565b818152915060208083019084810181840286018201871015613f5b57600080fd5b60005b84811015611cb557813584529282019290820190600101613f5e565b600082601f830112613f8a578081fd5b8135613f98613cfa826158ef565b9150808252836020828501011115613faf57600080fd5b8060208401602084013760009082016020015292915050565b600082601f830112613fd8578081fd5b8151613fe6613cfa826158ef565b9150808252836020828501011115613ffd57600080fd5b611cba81602084016020860161591e565b60006101c0808385031215614021578182fd5b61402a816158a8565b9150506140378383613cc6565b81526140468360208401613cc6565b60208201526140588360408401613cc6565b604082015261406a8360608401613cc6565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e08201526101008083013581830152506101208083013581830152506101408083013567ffffffffffffffff808211156140cc57600080fd5b6140d886838701613f7a565b838501526101609250828501359150808211156140f457600080fd5b61410086838701613f7a565b8385015261018092508285013591508082111561411c57600080fd5b61412886838701613f7a565b838501526101a092508285013591508082111561414457600080fd5b5061415185828601613f7a565b82840152505092915050565b60006101c0808385031215614170578182fd5b614179816158a8565b9150506141868383613cd1565b81526141958360208401613cd1565b60208201526141a78360408401613cd1565b60408201526141b98360608401613cd1565b60608201526080820151608082015260a082015160a082015260c082015160c082015260e082015160e08201526101008083015181830152506101208083015181830152506101408083015167ffffffffffffffff8082111561421b57600080fd5b61422786838701613fc8565b8385015261016092508285015191508082111561424357600080fd5b61424f86838701613fc8565b8385015261018092508285015191508082111561426b57600080fd5b61427786838701613fc8565b838501526101a092508285015191508082111561429357600080fd5b5061415185828601613fc8565b805160ff8116811461093d57600080fd5b6000602082840312156142c2578081fd5b8135610ceb81615979565b600080604083850312156142df578081fd5b82516142ea81615979565b60208401519092506142fb81615979565b809150509250929050565b60008060006060848603121561431a578081fd5b835161432581615979565b602085015190935061433681615979565b80925050604084015190509250925092565b60008060006060848603121561435c578081fd5b835161436781615979565b602085015190935067ffffffffffffffff811115614383578182fd5b61438f86828701613fc8565b925050604084015190509250925092565b600080600080608085870312156143b5578182fd5b84516143c081615979565b602086015190945067ffffffffffffffff808211156143dd578384fd5b6143e988838901613fc8565b945060408701519150808211156143fe578384fd5b61440a88838901613fc8565b9350606087015191508082111561441f578283fd5b5061442c87828801613fc8565b91505092959194509250565b6000806040838503121561444a578182fd5b823561445581615979565b9150602083013567ffffffffffffffff811115614470578182fd5b61447c85828601613dad565b9150509250929050565b6000806000806080858703121561449b578182fd5b84356144a681615979565b9350602085013567ffffffffffffffff808211156144c2578384fd5b6144ce88838901613f1c565b945060408701359150808211156144e3578384fd5b6144ef88838901613f1c565b93506060870135915080821115614504578283fd5b5061442c87828801613f7a565b60008060408385031215614523578182fd5b823561452e81615979565b9150602083013567ffffffffffffffff811115614549578182fd5b61447c85828601613f7a565b600080600060608486031215614569578081fd5b833561457481615979565b9250602084013567ffffffffffffffff81111561458f578182fd5b61459b86828701613f7a565b925050604084013590509250925092565b600080604083850312156145be578182fd5b82356145c981615979565b946020939093013593505050565b6000602082840312156145e8578081fd5b813567ffffffffffffffff8111156145fe578182fd5b61169a84828501613cdc565b60006020828403121561461b578081fd5b815167ffffffffffffffff811115614631578182fd5b61169a84828501613e08565b600080600060608486031215614651578081fd5b833567ffffffffffffffff80821115614668578283fd5b61467487838801613e63565b94506020860135915080821115614689578283fd5b61469587838801613cdc565b935060408601359150808211156146aa578283fd5b506146b786828701613f1c565b9150509250925092565b600080604083850312156146d3578182fd5b823567ffffffffffffffff808211156146ea578384fd5b6146f686838701613e63565b9350602085013591508082111561470b578283fd5b5061447c85828601613dad565b60008060006060848603121561472c578081fd5b835167ffffffffffffffff80821115614743578283fd5b61474f87838801613e08565b94506020860151915080821115614764578283fd5b61477087838801613ebe565b93506040860151915080821115614785578283fd5b506146b786828701613d48565b6000806000606084860312156147a6578081fd5b835167ffffffffffffffff808211156147bd578283fd5b6147c987838801613e08565b9450602086015193506040860151915080821115614785578283fd5b600080604083850312156147f7578182fd5b823567ffffffffffffffff8082111561480e578384fd5b6146f686838701613f1c565b6000806040838503121561482c578182fd5b825167ffffffffffffffff80821115614843578384fd5b61484f86838701613ebe565b93506020850151915080821115614864578283fd5b5061447c85828601613d48565b600060208284031215614882578081fd5b81518015158114610ceb578182fd5b600080600080608085870312156148a6578182fd5b8451935060208501516148b881615979565b604086015190935067ffffffffffffffff808211156143fe578384fd5b600080604083850312156148e7578182fd5b505080516020909101519092909150565b6000806040838503121561490a578182fd5b82519150602083015167ffffffffffffffff811115614927578182fd5b61447c85828601613fc8565b600080600060608486031215614947578081fd5b83519250602084015167ffffffffffffffff80821115614965578283fd5b61497187838801613fc8565b93506040860151915080821115614986578283fd5b506146b786828701613fc8565b600080604083850312156149a5578182fd5b8251915060208301516142fb8161598e565b600080604083850312156149c9578182fd5b82516001600160e01b0319811681146142ea578283fd5b6000602082840312156149f1578081fd5b813567ffffffffffffffff811115614a07578182fd5b61169a84828501613f7a565b600060608284031215614a24578081fd5b614a2e60606158a8565b614a3884846142a0565b815260208301516020820152604083015160408201528091505092915050565b600060208284031215614a69578081fd5b815167ffffffffffffffff811115614a7f578182fd5b61169a8482850161415d565b600080600060608486031215614a9f578081fd5b833567ffffffffffffffff811115614ab5578182fd5b614ac18682870161400e565b9350506020840135614ad281615979565b929592945050506040919091013590565b60008060408385031215614af5578182fd5b823567ffffffffffffffff80821115614b0c578384fd5b614b188683870161400e565b93506020850135915080821115614b2d578283fd5b5061447c85828601613f7a565b600080600060608486031215614b4e578081fd5b833567ffffffffffffffff811115614b64578182fd5b614b708682870161400e565b935050602084013591506040840135614b8881615979565b809150509250925092565b60008060008060808587031215614ba8578182fd5b845167ffffffffffffffff80821115614bbf578384fd5b614bcb8883890161415d565b95506020870151915080821115614be0578384fd5b6143e98883890161415d565b600080600060608486031215614c00578081fd5b835167ffffffffffffffff80821115614c17578283fd5b614c238783880161415d565b9450602086015193506040860151915080821115614986578283fd5b600080600060608486031215614c53578081fd5b833567ffffffffffffffff80821115614c6a578283fd5b81860160a08189031215614c7c578384fd5b614c8660a06158a8565b92508035835260208101356020840152604081013560408401526060810135614cae81615979565b6060840152608081013582811115614cc4578485fd5b614cd089828401613f7a565b608085015250919450505060208401359150614cef8560408601613cc6565b90509250925092565b600060208284031215614d09578081fd5b5051919050565b60008060408385031215614d22578182fd5b8251614d2d8161598e565b6020939093015192949293505050565b600080600060608486031215614d51578081fd5b8351614d5c8161598e565b602085015160408601519194509250614b8881615979565b60008060008060808587031215614d89578182fd5b614d9386866142a0565b9350602085015192506040850151614daa81615979565b606086015190925067ffffffffffffffff811115614dc6578182fd5b61442c87828801613fc8565b600080600060608486031215614de6578081fd5b614df085856142a0565b925060208401519150604084015167ffffffffffffffff811115614e12578182fd5b6146b786828701613fc8565b600080600060608486031215614e32578081fd5b614e3c85856142a0565b925060208401519150604084015190509250925092565b6001600160a01b03169052565b6000815180845260208401935060208301825b82811015614e9a5781516001600160a01b0316865260209586019590910190600101614e73565b5093949350505050565b600081518084526020840180819550602083028101915060208501845b84811015614eef578284038852614ed9848351614f2c565b6020988901989094509190910190600101614ec1565b50919695505050505050565b6000815180845260208401935060208301825b82811015614e9a578151865260209586019590910190600101614f0e565b60008151808452614f4481602086016020860161591e565b601f01601f19169290920160200192915050565b805160ff16825260208082015190830152604090810151910152565b60006101c0614f84848451614e53565b6020830151614f966020860182614e53565b506040830151614fa96040860182614e53565b506060830151614fbc6060860182614e53565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e085015261010080840151818601525061012080840151818601525061014080840151828287015261501583870182614f2c565b915050610160915081840151858203838701526150328282614f2c565b92505050610180808401518583038287015261504e8382614f2c565b9150506101a09150818401518582038387015261506b8282614f2c565b9695505050505050565b6000825161508781846020870161591e565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60006001600160a01b0386168252608060208301526151056080830186614efb565b82810360408401526151178186614efb565b83810360608501526151298186614f2c565b98975050505050505050565b60006001600160a01b0385168252606060208301526151576060830185614f2c565b9050826040830152949350505050565b60006001600160a01b0386168252608060208301526151896080830186614f2c565b82810360408401526151178186614f2c565b6001600160a01b03929092168252602082015260400190565b6000608082526151c76080830187614ea4565b82810360208401526151d98187614e60565b83810360408501526151eb8187614e60565b91505082810360608401526152008185614efb565b979650505050505050565b602080825282518282018190526000918401906040840190835b8181101561524b576152378451615913565b835260209384019390920191600101615225565b509095945050505050565b606080825284519082018190526000906020906080840190828801845b8281101561529957615286848351614f58565b6060939093019290840190600101615273565b505050838103828501526152ad8187614efb565b84810360408601528551808252908301915082860190845b818110156152e35782511515845292840192918401916001016152c5565b509198975050505050505050565b600060208252610ceb6020830184614efb565b6000604082526153176040830185614efb565b82810360208401526153298185614ea4565b95945050505050565b6000604082526153456040830185614efb565b82810360208401526153298185614efb565b90815260200190565b60008582526001600160a01b0385166020830152608060408301526153886080830185614f2c565b82810360608401526152008185614f2c565b918252602082015260400190565b60008382526040602083015261169a6040830184614f2c565b6000848252606060208301526153da6060830185614f2c565b828103604084015261506b8185614f2c565b828152604081016153fc8361596f565b8260208301529392505050565b6001600160e01b031991909116815260200190565b6001600160e01b03199290921682526001600160a01b0316602082015260400190565b60006001600160e01b0319871682526001600160a01b038616602083015260a0604083015261547360a0830186614efb565b82810360608401526154858186614efb565b83810360808501526154978186614f2c565b9998505050505050505050565b60006001600160e01b0319861682526001600160a01b0385166020830152608060408301526154d66080830185614f2c565b905082606083015295945050505050565b6001600160e01b03199390931683526001600160a01b03919091166020830152604082015260600190565b60006001600160e01b031985168252606060208301526155356060830185614efb565b828103604084015261506b8185614ea4565b600060208252610ceb6020830184614f2c565b60006080825261556d6080830187614f2c565b6001600160a01b03958616602084015293909416604082015260ff9190911660609091015292915050565b60006155a38561594e565b848252836020830152606060408301526153296060830184614f2c565b606081016155cd8561595b565b938152602081019290925260409091015290565b606081016155ee85615965565b93815260208101929092526001600160a01b031660409091015290565b604081016156188461595b565b9281526020015290565b606081016155cd85615965565b60608101600885106155cd57fe5b6020810161564a83615913565b825292915050565b600061565d8661596f565b8582528460208301526001600160a01b03841660408301526080606083015261506b6080830184614f2c565b604081016156188461594e565b6000608082526156a96080830187614f2c565b602083820381850152818751808452828401915082838202850101838a01865b838110156156f757601f198784030185526156e5838351614f74565b948601949250908501906001016156c9565b5050868103604088015261570b818a614efb565b94505050505082810360608401526152008185614ea4565b60208082526013908201527f554e4b4e4f574e5f52455455524e5f4441544100000000000000000000000000604082015260600190565b60208082526019908201527f554e4b4e4f574e5f46554e4354494f4e5f53454c4543544f5200000000000000604082015260600190565b6020808252600d908201527f554e494d504c454d454e54454400000000000000000000000000000000000000604082015260600190565b6020808252600c908201527f4241445f53454c4543544f520000000000000000000000000000000000000000604082015260600190565b6020808252600e908201527f57524f4e475f50524f58595f4944000000000000000000000000000000000000604082015260600190565b60a081016158448286614f58565b8360608301528215156080830152949350505050565b600060208252610ceb6020830184614f74565b6000604082526158806040830185614f74565b82810360208401526153298185614f2c565b9283526020830191909152604082015260600190565b60405181810167ffffffffffffffff811182821017156158c757600080fd5b604052919050565b600067ffffffffffffffff8211156158e5578081fd5b5060209081020190565b600067ffffffffffffffff821115615905578081fd5b50601f01601f191660200190565b8060058110610c9057fe5b60005b83811015615939578181015183820152602001615921565b83811115615948576000848401525b50505050565b6002811061595857fe5b50565b6004811061595857fe5b6003811061595857fe5b6007811061595857fe5b6001600160a01b038116811461595857600080fd5b60ff8116811461595857600080fdfea365627a7a72315820a6e2caf6b8cfb25159763e34dd839685d57e0d8a74ab5a72d4f2913f3fbccc436c6578706572696d656e74616cf564736f6c634300050d0040" } } }, diff --git a/packages/order-utils/package.json b/packages/order-utils/package.json index bb23bc80c9..a07b42e0ee 100644 --- a/packages/order-utils/package.json +++ b/packages/order-utils/package.json @@ -64,7 +64,6 @@ }, "dependencies": { "@0x/abi-gen-wrappers": "^5.4.0-beta.3", - "@0x/contracts-dev-utils": "^0.1.0-beta.3", "@0x/assert": "^2.2.0-beta.2", "@0x/contract-addresses": "^3.3.0-beta.4", "@0x/contract-artifacts": "^2.3.0-beta.3", diff --git a/packages/order-utils/src/constants.ts b/packages/order-utils/src/constants.ts index 08f2e4d0a0..0c3c434995 100644 --- a/packages/order-utils/src/constants.ts +++ b/packages/order-utils/src/constants.ts @@ -1,4 +1,4 @@ -import { BigNumber } from '@0x/utils'; +import { BigNumber, NULL_ADDRESS, NULL_BYTES } from '@0x/utils'; import { MethodAbi } from 'ethereum-types'; const ERC20_METHOD_ABI: MethodAbi = { @@ -84,8 +84,9 @@ const STATIC_CALL_METHOD_ABI: MethodAbi = { }; export const constants = { - NULL_ADDRESS: '0x0000000000000000000000000000000000000000', - NULL_BYTES: '0x', + NULL_ADDRESS, + FAKED_PROVIDER: { isEIP1193: true }, + NULL_BYTES, NULL_ERC20_ASSET_DATA: '0xf47261b00000000000000000000000000000000000000000000000000000000000000000', // tslint:disable-next-line:custom-no-magic-numbers UNLIMITED_ALLOWANCE_IN_BASE_UNITS: new BigNumber(2).pow(256).minus(1), diff --git a/packages/order-utils/src/eip712_utils.ts b/packages/order-utils/src/eip712_utils.ts index b31a37ae8d..d0de86691e 100644 --- a/packages/order-utils/src/eip712_utils.ts +++ b/packages/order-utils/src/eip712_utils.ts @@ -1,5 +1,5 @@ +import { DevUtilsContract } from '@0x/abi-gen-wrappers'; import { assert } from '@0x/assert'; -import { DevUtilsContract } from '@0x/contracts-dev-utils'; import { schemas } from '@0x/json-schemas'; import { EIP712DomainWithDefaultSchema, @@ -112,9 +112,7 @@ export const eip712Utils = { version: constants.COORDINATOR_DOMAIN_VERSION, verifyingContract, }; - const transactionHash = await new DevUtilsContract('0x0000000000000000000000000000000000000000', { - isEIP1193: true, - } as any) + const transactionHash = await new DevUtilsContract(constants.NULL_ADDRESS, constants.FAKED_PROVIDER as any) .getTransactionHash( transaction, new BigNumber(transaction.domain.chainId), diff --git a/packages/order-utils/src/index.ts b/packages/order-utils/src/index.ts index dc8f5067e5..1186270d4a 100644 --- a/packages/order-utils/src/index.ts +++ b/packages/order-utils/src/index.ts @@ -5,6 +5,7 @@ export { marketUtils } from './market_utils'; export { rateUtils } from './rate_utils'; export { sortingUtils } from './sorting_utils'; export { orderCalculationUtils } from './order_calculation_utils'; +export { orderHashUtils } from './order_hash_utils'; export { eip712Utils } from './eip712_utils'; diff --git a/packages/order-utils/src/order_factory.ts b/packages/order-utils/src/order_factory.ts index 46d34c3a8f..37fdf35d41 100644 --- a/packages/order-utils/src/order_factory.ts +++ b/packages/order-utils/src/order_factory.ts @@ -1,13 +1,13 @@ -import { DevUtilsContract } from '@0x/contracts-dev-utils'; import { Order, SignedOrder } from '@0x/types'; import { BigNumber, providerUtils } from '@0x/utils'; import { SupportedProvider } from 'ethereum-types'; -import * as _ from 'lodash'; import { constants } from './constants'; +import { orderHashUtils } from './order_hash_utils'; import { generatePseudoRandomSalt } from './salt'; import { signatureUtils } from './signature_utils'; import { CreateOrderOpts } from './types'; + export const orderFactory = { createOrderFromPartial(partialOrder: Partial): Order { const chainId: number = getChainIdFromPartial(partialOrder); @@ -77,20 +77,16 @@ export const orderFactory = { await providerUtils.getChainIdAsync(supportedProvider), createOrderOpts, ); - const orderHash = await new DevUtilsContract('0x0000000000000000000000000000000000000000', { - isEIP1193: true, - } as any) - .getOrderHash(order, new BigNumber(order.chainId), order.exchangeAddress) - .callAsync(); + const orderHash = await orderHashUtils.getOrderHashAsync(order); const signature = await signatureUtils.ecSignHashAsync(supportedProvider, orderHash, makerAddress); - const signedOrder: SignedOrder = _.assign(order, { signature }); + const signedOrder: SignedOrder = { ...order, signature }; return signedOrder; }, }; function getChainIdFromPartial(partialOrder: Partial | Partial): number { const chainId = partialOrder.chainId; - if (!_.isNumber(chainId)) { + if (chainId === undefined || !Number.isInteger(chainId)) { throw new Error('chainId must be valid'); } return chainId; diff --git a/packages/order-utils/src/order_hash_utils.ts b/packages/order-utils/src/order_hash_utils.ts new file mode 100644 index 0000000000..6bee74577f --- /dev/null +++ b/packages/order-utils/src/order_hash_utils.ts @@ -0,0 +1,16 @@ +import { DevUtilsContract } from '@0x/abi-gen-wrappers'; +import { Order } from '@0x/types'; +import { BigNumber } from '@0x/utils'; + +import { constants } from './constants'; + +const devUtilsContract = new DevUtilsContract(constants.NULL_ADDRESS, constants.FAKED_PROVIDER as any); + +export const orderHashUtils = { + getOrderHashAsync: async (order: Order): Promise => { + const orderHash = await devUtilsContract + .getOrderHash(order, new BigNumber(order.chainId), order.exchangeAddress) + .callAsync(); + return orderHash; + }, +}; diff --git a/packages/order-utils/src/signature_utils.ts b/packages/order-utils/src/signature_utils.ts index b75f079b4a..81e879a93d 100644 --- a/packages/order-utils/src/signature_utils.ts +++ b/packages/order-utils/src/signature_utils.ts @@ -1,4 +1,4 @@ -import { DevUtilsContract } from '@0x/contracts-dev-utils'; +import { DevUtilsContract } from '@0x/abi-gen-wrappers'; import { schemas } from '@0x/json-schemas'; import { ECSignature, @@ -16,12 +16,12 @@ import * as ethUtil from 'ethereumjs-util'; import * as _ from 'lodash'; import { assert } from './assert'; +import { constants } from './constants'; import { eip712Utils } from './eip712_utils'; +import { orderHashUtils } from './order_hash_utils'; import { TypedDataError } from './types'; -const devUtilsContract = new DevUtilsContract('0x0000000000000000000000000000000000000000', { - isEIP1193: true, -} as any); +const devUtilsContract = new DevUtilsContract(constants.NULL_ADDRESS, constants.FAKED_PROVIDER as any); export const signatureUtils = { /** @@ -51,9 +51,7 @@ export const signatureUtils = { if (err.message.includes('User denied message signature')) { throw err; } - const orderHash = await devUtilsContract - .getOrderHash(order, new BigNumber(order.chainId), order.exchangeAddress) - .callAsync(); + const orderHash = await orderHashUtils.getOrderHashAsync(order); const signatureHex = await signatureUtils.ecSignHashAsync(supportedProvider, orderHash, signerAddress); const signedOrder = { ...order, diff --git a/packages/order-utils/test/signature_utils_test.ts b/packages/order-utils/test/signature_utils_test.ts index bd74eb89c9..3d3dd8d0b2 100644 --- a/packages/order-utils/test/signature_utils_test.ts +++ b/packages/order-utils/test/signature_utils_test.ts @@ -1,5 +1,5 @@ +import { DevUtilsContract } from '@0x/abi-gen-wrappers'; import { assert } from '@0x/assert'; -import { DevUtilsContract } from '@0x/contracts-dev-utils'; import { Order, SignatureType, ZeroExTransaction } from '@0x/types'; import { BigNumber } from '@0x/utils'; import * as chai from 'chai'; @@ -10,6 +10,7 @@ import 'mocha'; import { generatePseudoRandomSalt } from '../src'; import { constants } from '../src/constants'; +import { orderHashUtils } from '../src/order_hash_utils'; import { isValidECSignature, signatureUtils } from '../src/signature_utils'; import { chaiSetup } from './utils/chai_setup'; @@ -18,9 +19,7 @@ import { provider, web3Wrapper } from './utils/web3_wrapper'; chaiSetup.configure(); const expect = chai.expect; -const devUtilsContract = new DevUtilsContract('0x0000000000000000000000000000000000000000', { - isEIP1193: true, -} as any); +const devUtilsContract = new DevUtilsContract(constants.NULL_ADDRESS, constants.FAKED_PROVIDER as any); describe('Signature utils', () => { let makerAddress: string; @@ -287,9 +286,7 @@ describe('Signature utils', () => { it('should result in the same signature as signing the order hash without an ethereum message prefix', async () => { // Note: Since order hash is an EIP712 hash the result of a valid EIP712 signature // of order hash is the same as signing the order without the Ethereum Message prefix. - const orderHashHex = await devUtilsContract - .getOrderHash(order, new BigNumber(order.chainId), order.exchangeAddress) - .callAsync(); + const orderHashHex = await orderHashUtils.getOrderHashAsync(order); const sig = ethUtil.ecsign( ethUtil.toBuffer(orderHashHex), Buffer.from('F2F48EE19680706196E2E339E5DA3491186E0C4C5030670656B0E0164837257D', 'hex'), diff --git a/packages/orderbook/src/utils.ts b/packages/orderbook/src/utils.ts index 83c89523da..7f29a5f75c 100644 --- a/packages/orderbook/src/utils.ts +++ b/packages/orderbook/src/utils.ts @@ -1,26 +1,16 @@ import { APIOrder, SignedOrder } from '@0x/connect'; -import { DevUtilsContract } from '@0x/contracts-dev-utils'; -import { BigNumber } from '@0x/utils'; - -const devUtilsContract = new DevUtilsContract('0x0000000000000000000000000000000000000000', { - isEIP1193: true, -} as any); +import { orderHashUtils } from '@0x/order-utils'; export const utils = { async getOrderHashAsync(order: APIOrder | SignedOrder): Promise { if ((order as APIOrder).metaData) { const apiOrder = order as APIOrder; const orderHash = - (apiOrder.metaData as any).orderHash || - (await devUtilsContract - .getOrderHash(apiOrder.order, new BigNumber(apiOrder.order.chainId), apiOrder.order.exchangeAddress) - .callAsync()); + (apiOrder.metaData as any).orderHash || (await orderHashUtils.getOrderHashAsync(apiOrder.order)); return orderHash; } else { const signedOrder = order as SignedOrder; - const orderHash = await devUtilsContract - .getOrderHash(signedOrder, new BigNumber(signedOrder.chainId), signedOrder.exchangeAddress) - .callAsync(); + const orderHash = await orderHashUtils.getOrderHashAsync(signedOrder); return orderHash; } }, diff --git a/packages/utils/src/constants.ts b/packages/utils/src/constants.ts index 2894d47474..94fb16d430 100644 --- a/packages/utils/src/constants.ts +++ b/packages/utils/src/constants.ts @@ -1 +1,2 @@ export const NULL_BYTES = '0x'; +export const NULL_ADDRESS = '0x0000000000000000000000000000000000000000'; diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts index 9023e9c977..81de561a40 100644 --- a/packages/utils/src/index.ts +++ b/packages/utils/src/index.ts @@ -8,7 +8,7 @@ export { BigNumber } from './configured_bignumber'; export { AbiDecoder } from './abi_decoder'; export { logUtils } from './log_utils'; export { abiUtils } from './abi_utils'; -export { NULL_BYTES } from './constants'; +export { NULL_BYTES, NULL_ADDRESS } from './constants'; export { errorUtils } from './error_utils'; export { fetchAsync } from './fetch_async'; export { signTypedDataUtils } from './sign_typed_data_utils';