From daa593d225a116c76aa121d5ebe193bfb28765fa Mon Sep 17 00:00:00 2001 From: "F. Eugene Aumson" Date: Wed, 20 Nov 2019 20:50:49 -0500 Subject: [PATCH] Updated DevUtils contract artifact (#2358) * Add updated DevUtils contract artifact New contract methods were added in #2321, but this artifact was not updated. * fix for breaking change in eth_utils --- .../artifacts/DevUtils.json | 74 ++++++++++++++++++- python-packages/order_utils/setup.py | 1 + .../src/zero_ex/order_utils/__init__.py | 7 +- 3 files changed, 75 insertions(+), 7 deletions(-) diff --git a/packages/contract-artifacts/artifacts/DevUtils.json b/packages/contract-artifacts/artifacts/DevUtils.json index 3a95c3b624..331efa53e2 100644 --- a/packages/contract-artifacts/artifacts/DevUtils.json +++ b/packages/contract-artifacts/artifacts/DevUtils.json @@ -9,6 +9,15 @@ "stateMutability": "nonpayable", "type": "constructor" }, + { + "constant": true, + "inputs": [], + "name": "EIP712_EXCHANGE_DOMAIN_HASH", + "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "payable": false, + "stateMutability": "view", + "type": "function" + }, { "constant": true, "inputs": [{ "internalType": "bytes", "name": "encoded", "type": "bytes" }], @@ -481,6 +490,39 @@ "stateMutability": "view", "type": "function" }, + { + "constant": true, + "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": "struct LibOrder.Order", + "name": "order", + "type": "tuple" + }, + { "internalType": "uint256", "name": "chainId", "type": "uint256" }, + { "internalType": "address", "name": "exchange", "type": "address" } + ], + "name": "getOrderHash", + "outputs": [{ "internalType": "bytes32", "name": "orderHash", "type": "bytes32" }], + "payable": false, + "stateMutability": "pure", + "type": "function" + }, { "constant": true, "inputs": [ @@ -649,6 +691,30 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "constant": true, + "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": "struct LibZeroExTransaction.ZeroExTransaction", + "name": "transaction", + "type": "tuple" + }, + { "internalType": "uint256", "name": "chainId", "type": "uint256" }, + { "internalType": "address", "name": "exchange", "type": "address" } + ], + "name": "getTransactionHash", + "outputs": [{ "internalType": "bytes32", "name": "transactionHash", "type": "bytes32" }], + "payable": false, + "stateMutability": "pure", + "type": "function" + }, { "constant": true, "inputs": [ @@ -924,20 +990,20 @@ }, "evm": { "bytecode": { - "object": "0x60806040523480156200001157600080fd5b5060405162006253380380620062538339810160408190526200003491620003be565b600080546001600160a01b0319166001600160a01b0383811691909117918290556040517f60704108000000000000000000000000000000000000000000000000000000008152839283928392911690636070410890620000ba907ff47261b00000000000000000000000000000000000000000000000000000000090600401620003ee565b60206040518083038186803b158015620000d357600080fd5b505afa158015620000e8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506200010e9190810190620003be565b600180546001600160a01b0319166001600160a01b039283161790556000546040517f607041080000000000000000000000000000000000000000000000000000000081529116906360704108906200018c907f025717920000000000000000000000000000000000000000000000000000000090600401620003ee565b60206040518083038186803b158015620001a557600080fd5b505afa158015620001ba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620001e09190810190620003be565b600280546001600160a01b0319166001600160a01b039283161790556000546040517f607041080000000000000000000000000000000000000000000000000000000081529116906360704108906200025e907fa7cb5fb70000000000000000000000000000000000000000000000000000000090600401620003ee565b60206040518083038186803b1580156200027757600080fd5b505afa1580156200028c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620002b29190810190620003be565b600380546001600160a01b0319166001600160a01b039283161790556000546040517f6070410800000000000000000000000000000000000000000000000000000000815291169063607041089062000330907fc339d10a0000000000000000000000000000000000000000000000000000000090600401620003ee565b60206040518083038186803b1580156200034957600080fd5b505afa1580156200035e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620003849190810190620003be565b600480546001600160a01b039283166001600160a01b0319918216179091556005805495909216941693909317909255506200041b915050565b600060208284031215620003d0578081fd5b81516001600160a01b0381168114620003e7578182fd5b9392505050565b7fffffffff0000000000000000000000000000000000000000000000000000000091909116815260200190565b615e28806200042b6000396000f3fe608060405234801561001057600080fd5b50600436106102c85760003560e01c80639a7e75261161017b578063cafd3a07116100d8578063d46950281161008c578063e4e6e7da11610071578063e4e6e7da14610711578063e77286eb14610732578063ee4f5a9414610754576102c8565b8063d4695028146106cf578063e25cabf7146106ef576102c8565b8063d186037f116100bd578063d186037f14610689578063d36379051461069c578063d3d862d1146106bc576102c8565b8063cafd3a0714610655578063d001c5dc14610676576102c8565b8063acaedc741161012f578063bbb2dcf611610114578063bbb2dcf6146105ef578063bc03f96414610611578063ca49f47c14610632576102c8565b8063acaedc74146105b9578063b43cffe1146105dc576102c8565b8063a0901e5111610160578063a0901e5114610573578063a5cd62ba14610586578063a6627e9f146105a6576102c8565b80639a7e75261461052c5780639eadc8351461054f576102c8565b806346eb65cb116102295780636f83188e116101dd5780637b66ad34116101c25780637b66ad34146104e55780637d727512146105065780638f4ce47914610519576102c8565b80636f83188e146104a15780637914b2ec146104c4576102c8565b8063590aa8751161020e578063590aa8751461044c57806363eb39921461046c578063651290421461047f576102c8565b806346eb65cb146104175780634dfdac201461042c576102c8565b8063314853ff1161028057806332aae3ad1161026557806332aae3ad146103b15780633db6dc61146103d3578063459be5e2146103f6576102c8565b8063314853ff1461037c578063327d30541461039e576102c8565b80630d7b7d76116102b15780630d7b7d7614610319578063165979e11461033a5780632322cf761461035c576102c8565b806302d0aec3146102cd57806304a5618a146102f7575b600080fd5b6102e06102db366004614f2d565b610776565b6040516102ee929190615836565b60405180910390f35b61030a610305366004614f2d565b6107d2565b6040516102ee93929190615931565b61032c610327366004614a5e565b610880565b6040516102ee9291906157e4565b61034d610348366004614f2d565b6108a2565b6040516102ee93929190615a6e565b61036f61036a366004614a5e565b6108ff565b6040516102ee9190615cdc565b61038f61038a366004614f2d565b610927565b6040516102ee9392919061580b565b61032c6103ac366004614f2d565b61096e565b6103c46103bf366004614f2d565b6109b0565b6040516102ee939291906159e2565b6103e66103e1366004614f2d565b610a03565b6040516102ee94939291906157aa565b610409610404366004614f2d565b610a4d565b6040516102ee929190615a56565b61042a610425366004614f2d565b610aa3565b005b61043f61043a366004614985565b610c36565b6040516102ee9190615744565b61045f61045a3660046147fe565b610cb9565b6040516102ee9190615991565b61045f61047a366004614aa2565b610d3d565b61049261048d366004614f2d565b610dc8565b6040516102ee93929190615511565b6104b46104af366004614f2d565b610e02565b6040516102ee9493929190615ae0565b6104d76104d2366004614f2d565b611943565b6040516102ee929190615868565b6104f86104f3366004614f2d565b61197b565b6040516102ee9291906154f7565b61036f610514366004614a5e565b6119b3565b6104d7610527366004614f2d565b6120c8565b61053f61053a366004614f2d565b612158565b6040516102ee9493929190615a9c565b61056261055d366004614f2d565b6121b9565b6040516102ee95949392919061588b565b61043f610581366004614b24565b612264565b610599610594366004614b8a565b6122dd565b6040516102ee919061565d565b61045f6105b4366004614af9565b6123a0565b6105cc6105c7366004614f2d565b612427565b6040516102ee94939291906155b9565b61045f6105ea3660046149d3565b612463565b6106026105fd366004614f2d565b6124f0565b6040516102ee9392919061595c565b61062461061f366004614f2d565b61259d565b6040516102ee9291906157f2565b610645610640366004614f2d565b6125d6565b6040516102ee94939291906158ee565b610668610663366004614f2d565b612687565b6040516102ee929190615ad3565b61043f610684366004614985565b6126d5565b61036f610697366004614a5e565b612743565b6106af6106aa366004614fe4565b612d86565b6040516102ee9190615a89565b61045f6106ca366004614d32565b613323565b6106e26106dd366004614f2d565b61335b565b6040516102ee9190615853565b6107026106fd366004614c0e565b6134a7565b6040516102ee939291906156a9565b61072461071f366004614985565b6135df565b6040516102ee929190615785565b61074561074036600461503c565b6135f8565b6040516102ee93929190615c80565b610767610762366004614f2d565b613832565b6040516102ee93929190615a2c565b60008061078a8361078561386f565b613893565b60006107a360048551866138ed9092919063ffffffff16565b8060200190516107b69190810190614ee0565b909350905060ff811660068111156107ca57fe5b915050915091565b600080806107e6848263ffffffff61393016565b92506001600160e01b031983167f025717920000000000000000000000000000000000000000000000000000000014610854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615c49565b60405180910390fd5b61086584601063ffffffff61396416565b915061087884602463ffffffff61399716565b929491935050565b60008061088d84846119b3565b91506108998484612743565b90509250929050565b60008060006108b3846107856139a3565b60006108cc60048651876138ed9092919063ffffffff16565b8060200190516108df9190810190615270565b9094509250905060ff811660028111156108f557fe5b9350509193909250565b600080600061090e8585610880565b9150915061091c82826139c7565b925050505b92915050565b6000606080610938846107856139dd565b835161094e90859060049063ffffffff6138ed16565b8060200190516109619190810190614e80565b9196909550909350915050565b60008061097d83610785613a01565b825161099390849060049063ffffffff6138ed16565b8060200190516109a69190810190614e22565b9094909350915050565b60008060606109c184610785613a25565b60006109da60048651876138ed9092919063ffffffff16565b8060200190516109ed9190810190615224565b9094509250905060ff811660018111156108f557fe5b600080606080610a1585610785613a49565b8451610a2b90869060049063ffffffff6138ed16565b806020019051610a3e9190810190614dde565b92989197509550909350915050565b600080610a5c83610785613a6d565b6000610a7560048551866138ed9092919063ffffffff16565b806020019051610a889190810190615157565b9250905060ff81166003811115610a9b57fe5b925050915091565b6000610ab5828263ffffffff61393016565b90506001600160e01b031981167ff47261b0000000000000000000000000000000000000000000000000000000001415610af957610af2826120c8565b5050610c32565b6001600160e01b031981167f02571792000000000000000000000000000000000000000000000000000000001415610b3c57610b34826107d2565b505050610c32565b6001600160e01b031981167fa7cb5fb7000000000000000000000000000000000000000000000000000000001415610b8157610b77826121b9565b5050505050610c32565b6001600160e01b031981167f94cfcdd7000000000000000000000000000000000000000000000000000000001415610bbc57610b34826124f0565b6001600160e01b031981167fc339d10a000000000000000000000000000000000000000000000000000000001415610c0057610bf7826125d6565b50505050610c32565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615c49565b5050565b606060008251905080604051908082528060200260200182016040528015610c68578160200160208202803883390190505b50915060005b818114610cb157610c9285858381518110610c8557fe5b6020026020010151612743565b838281518110610c9e57fe5b6020908102919091010152600101610c6e565b505092915050565b6040516060907ff47261b00000000000000000000000000000000000000000000000000000000090610cef9084906024016154e3565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b0319909316929092179091529050919050565b6040516060907fc339d10a0000000000000000000000000000000000000000000000000000000090610d7790869086908690602401615587565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b03199093169290921790915290505b9392505050565b6000806000610dd984610785613a91565b8351610def90859060049063ffffffff6138ed16565b8060200190516109619190810190614853565b60608080806000610e19868263ffffffff61393016565b90506001600160e01b031981167fdedfc1f1000000000000000000000000000000000000000000000000000000001415610e8a576040518060400160405280601181526020017f626174636843616e63656c4f72646572730000000000000000000000000000008152509450611419565b6001600160e01b031981167f9694a402000000000000000000000000000000000000000000000000000000001415610ef9576040518060400160405280600f81526020017f626174636846696c6c4f726465727300000000000000000000000000000000008152509450611419565b6001600160e01b031981167f8ea8dfe4000000000000000000000000000000000000000000000000000000001415610f68576040518060400160405280601681526020017f626174636846696c6c4f72646572734e6f5468726f77000000000000000000008152509450611419565b6001600160e01b031981167fbeee2e14000000000000000000000000000000000000000000000000000000001415610fd7576040518060400160405280601581526020017f626174636846696c6c4f724b696c6c4f726465727300000000000000000000008152509450611419565b6001600160e01b031981167f2da62987000000000000000000000000000000000000000000000000000000001415611046576040518060400160405280600b81526020017f63616e63656c4f726465720000000000000000000000000000000000000000008152509450611419565b6001600160e01b031981167f9b44d5560000000000000000000000000000000000000000000000000000000014156110b5576040518060400160405280600981526020017f66696c6c4f7264657200000000000000000000000000000000000000000000008152509450611419565b6001600160e01b031981167fe14b58c4000000000000000000000000000000000000000000000000000000001415611124576040518060400160405280600f81526020017f66696c6c4f724b696c6c4f7264657200000000000000000000000000000000008152509450611419565b6001600160e01b031981167f78d29ac1000000000000000000000000000000000000000000000000000000001415611193576040518060400160405280601681526020017f6d61726b65744275794f72646572734e6f5468726f77000000000000000000008152509450611419565b6001600160e01b031981167f369da099000000000000000000000000000000000000000000000000000000001415611202576040518060400160405280601781526020017f6d61726b657453656c6c4f72646572734e6f5468726f770000000000000000008152509450611419565b6001600160e01b031981167f8bc8efb3000000000000000000000000000000000000000000000000000000001415611271576040518060400160405280601981526020017f6d61726b65744275794f726465727346696c6c4f724b696c6c000000000000008152509450611419565b6001600160e01b031981167fa6c3bf330000000000000000000000000000000000000000000000000000000014156112e0576040518060400160405280601a81526020017f6d61726b657453656c6c4f726465727346696c6c4f724b696c6c0000000000008152509450611419565b6001600160e01b031981167f88ec79fb00000000000000000000000000000000000000000000000000000000141561134f576040518060400160405280600b81526020017f6d617463684f72646572730000000000000000000000000000000000000000008152509450611419565b6001600160e01b031981167f4f9559b10000000000000000000000000000000000000000000000000000000014806113b057506001600160e01b031981167f2280c91000000000000000000000000000000000000000000000000000000000145b156113e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615bdb565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615ba4565b6001600160e01b031981167fdedfc1f10000000000000000000000000000000000000000000000000000000014156114be57855161146190879060049063ffffffff613ab516565b8060200190516114749190810190614b57565b604080516000808252602082019092529195505b50604080516000808252602082019092529194506114b6565b60608152602001906001900390816114a15790505b50915061193b565b6001600160e01b031981167fbeee2e1400000000000000000000000000000000000000000000000000000000148061151f57506001600160e01b031981167f9694a40200000000000000000000000000000000000000000000000000000000145b8061155357506001600160e01b031981167f8ea8dfe400000000000000000000000000000000000000000000000000000000145b1561156d5761156186613b35565b9195509350915061193b565b6001600160e01b031981167f2da629870000000000000000000000000000000000000000000000000000000014156116555760408051600180825281830190925290816020015b6115bc614131565b8152602001906001900390816115b457505086519094506115e790879060049063ffffffff613ab516565b8060200190516115fa9190810190614fb1565b8460008151811061160757fe5b602002602001018190525060006040519080825280602002602001820160405280156114885781602001602082028038833901905050604080516000808252602082019092529194506114b6565b6001600160e01b031981167fe14b58c40000000000000000000000000000000000000000000000000000000014806116b657506001600160e01b031981167f9b44d55600000000000000000000000000000000000000000000000000000000145b156116c45761156186613b64565b6001600160e01b031981167f78d29ac100000000000000000000000000000000000000000000000000000000148061172557506001600160e01b031981167f369da09900000000000000000000000000000000000000000000000000000000145b8061175957506001600160e01b031981167f8bc8efb300000000000000000000000000000000000000000000000000000000145b8061178d57506001600160e01b031981167fa6c3bf3300000000000000000000000000000000000000000000000000000000145b1561179b5761156186613c5e565b6001600160e01b031981167f88ec79fb00000000000000000000000000000000000000000000000000000000141561193b576117d5614131565b6117dd614131565b6060806117f760048b518c613ab59092919063ffffffff16565b80602001905161180a9190810190615093565b604080516002808252606082019092529498509296509094509250816020015b611832614131565b81526020019060019003908161182a579050509750838860008151811061185557fe5b6020026020010181905250828860018151811061186e57fe5b602090810291909101015260408051600280825260608201909252908160200160208202803883390190505096508360a00151876000815181106118ae57fe5b6020026020010181815250508260a00151876001815181106118cc57fe5b60209081029190910101526040805160028082526060820190925290816020015b60608152602001906001900390816118ed579050509550818660008151811061191257fe5b6020026020010181905250808660018151811061192b57fe5b6020026020010181905250505050505b509193509193565b60008061195283610785613cd2565b825161196890849060049063ffffffff6138ed16565b8060200190516109a69190810190614f04565b60008061198a83610785613cf6565b82516119a090849060049063ffffffff6138ed16565b8060200190516109a6919081019061481a565b6000806119c6838263ffffffff61393016565b90506001600160e01b031981167ff47261b0000000000000000000000000000000000000000000000000000000001415611b3b576000611a0d84601063ffffffff61396416565b6040519091506060907f70a082310000000000000000000000000000000000000000000000000000000090611a469088906024016154e3565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060006060836001600160a01b031683604051611ac191906154c7565b600060405180830381855afa9150503d8060008114611afc576040519150601f19603f3d011682016040523d82523d6000602084013e611b01565b606091505b5091509150818015611b14575080516020145b611b1f576000611b30565b611b3081600063ffffffff61399716565b9550505050506120c1565b6001600160e01b031981167f02571792000000000000000000000000000000000000000000000000000000001415611cd657600080611b79856107d2565b6040519194509250606091507f6352211e0000000000000000000000000000000000000000000000000000000090611bb5908490602401615cdc565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060006060846001600160a01b031683604051611c3091906154c7565b600060405180830381855afa9150503d8060008114611c6b576040519150601f19603f3d011682016040523d82523d6000602084013e611c70565b606091505b50915091506000828015611c85575081516020145b611c90576000611ca1565b611ca182600c63ffffffff61396416565b9050896001600160a01b0316816001600160a01b031614611cc3576000611cc6565b60015b60ff1697505050505050506120c1565b6001600160e01b031981167fa7cb5fb7000000000000000000000000000000000000000000000000000000001415611eb9576000606080611d16866121b9565b5081519296509094509250905060005b818114611eaf5783516060907efdd58e00000000000000000000000000000000000000000000000000000000908b90879085908110611d6157fe5b6020026020010151604051602401611d7a9291906155ed565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060006060876001600160a01b031683604051611df591906154c7565b600060405180830381855afa9150503d8060008114611e30576040519150601f19603f3d011682016040523d82523d6000602084013e611e35565b606091505b50915091506000828015611e4a575081516020145b611e55576000611e66565b611e6682600063ffffffff61399716565b90506000878681518110611e7657fe5b60200260200101518281611e8657fe5b0490508b811080611e9557508b155b15611e9e57809b505b505060019093019250611d26915050565b50505050506120c1565b6001600160e01b031981167fc339d10a00000000000000000000000000000000000000000000000000000000141561200a576040516060907fa85e59e40000000000000000000000000000000000000000000000000000000090611f28908690600090819081906024016159a4565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b03199094169390931790925260045491519092506000916001600160a01b031690611f8f9084906154c7565b600060405180830381855afa9150503d8060008114611fca576040519150601f19603f3d011682016040523d82523d6000602084013e611fcf565b606091505b5050905080611fdf576000612001565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b935050506120c1565b6001600160e01b031981167f94cfcdd70000000000000000000000000000000000000000000000000000000014156120c157606080612048856124f0565b80519194509250905060005b8181146120bc57600061207a8985848151811061206d57fe5b60200260200101516119b3565b9050600085838151811061208a57fe5b6020026020010151828161209a57fe5b049050878110806120a9575087155b156120b2578097505b5050600101612054565b505050505b5092915050565b6000806120db838263ffffffff61393016565b91506001600160e01b031982167ff47261b00000000000000000000000000000000000000000000000000000000014612140576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615c49565b61215183601063ffffffff61396416565b9050915091565b6000806000606061216b85610785613d1a565b600061218460048751886138ed9092919063ffffffff16565b80602001905161219791908101906151c6565b91965094509250905060ff811660068111156121af57fe5b9450509193509193565b600080606080806121d0868563ffffffff61393016565b94506001600160e01b031985167fa7cb5fb70000000000000000000000000000000000000000000000000000000014612235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615c49565b505050506024828101516044840151606485015160848601519496929591820184019490820184019391010190565b6060808251604051908082528060200260200182016040528015612292578160200160208202803883390190505b50905060005b835181146120c1578381815181106122ac57fe5b60200260200101516001600160a01b0316318282815181106122ca57fe5b6020908102919091010152600101612298565b60606000845190508060405190808252806020026020018201604052801561230f578160200160208202803883390190505b50915060005b8181146123975761236086828151811061232b57fe5b602002602001015186838151811061233f57fe5b602002602001015186848151811061235357fe5b6020026020010151612d86565b83828151811061236c57fe5b6020026020010190600481111561237f57fe5b9081600481111561238c57fe5b905250600101612315565b50509392505050565b6040516060907f0257179200000000000000000000000000000000000000000000000000000000906123d890859085906024016155ed565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b031990931692909217909152905092915050565b6000606080606061243a85610785613d3e565b845161245090869060049063ffffffff6138ed16565b806020019051610a3e91908101906148ed565b6040516060907fa7cb5fb7000000000000000000000000000000000000000000000000000000009061249f908790879087908790602401615535565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b0319909316929092179091529050949350505050565b6000606080612505848463ffffffff61393016565b92506001600160e01b031983167f94cfcdd7000000000000000000000000000000000000000000000000000000001461256a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615c49565b835161258090859060049063ffffffff613ab516565b8060200190516125939190810190614d67565b9395909450915050565b600060606125ad83610785613d62565b82516125c390849060049063ffffffff6138ed16565b8060200190516109a69190810190614e45565b6000806060816125ec858263ffffffff61393016565b93506001600160e01b031984167fc339d10a0000000000000000000000000000000000000000000000000000000014612651576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615c49565b845161266790869060049063ffffffff613ab516565b80602001905161267a9190810190614895565b9597919650949350915050565b60008061269683610785613d86565b60006126af60048551866138ed9092919063ffffffff16565b8060200190516126c29190810190615157565b9250905060ff81166001811115610a9b57fe5b606060008251905080604051908082528060200260200182016040528015612707578160200160208202803883390190505b50915060005b818114610cb1576127248585838151811061206d57fe5b83828151811061273057fe5b602090810291909101015260010161270d565b600080612756838263ffffffff61393016565b90506001600160e01b031981167f94cfcdd700000000000000000000000000000000000000000000000000000000141561280857606080612796856124f0565b80519194509250905060005b8181146127fd5760006127bb89858481518110610c8557fe5b905060008583815181106127cb57fe5b602002602001015182816127db57fe5b049050878110806127ea575087155b156127f3578097505b50506001016127a2565b506109219350505050565b6001600160e01b031981167ff47261b000000000000000000000000000000000000000000000000000000000141561289357600061284d84601063ffffffff61396416565b6001546040519192506060917fdd62ed3e0000000000000000000000000000000000000000000000000000000091611a469189916001600160a01b0316906024016154f7565b6001600160e01b031981167f02571792000000000000000000000000000000000000000000000000000000001415612b83576000806128d1856107d2565b600254604051929550909350606092507fe985e9c5000000000000000000000000000000000000000000000000000000009161291d918a916001600160a01b03909116906024016154f7565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060006060846001600160a01b03168360405161299891906154c7565b600060405180830381855afa9150503d80600081146129d3576040519150601f19603f3d011682016040523d82523d6000602084013e6129d8565b606091505b50915091508115806129ec57508051602014155b80612a085750612a0381600063ffffffff61399716565b600114155b15612b56576040516060907f081812fc0000000000000000000000000000000000000000000000000000000090612a43908790602401615cdc565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050856001600160a01b031681604051612aba91906154c7565b600060405180830381855afa9150503d8060008114612af5576040519150601f19603f3d011682016040523d82523d6000602084013e612afa565b606091505b509093509150828015612b0e575081516020145b8015612b3d57506002546001600160a01b0316612b3283600c63ffffffff61396416565b6001600160a01b0316145b612b48576000612b4b565b60015b60ff16975050611eaf565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff965050505050506120c1565b6001600160e01b031981167fa7cb5fb7000000000000000000000000000000000000000000000000000000001415612d2b576000612bc0846121b9565b5050600354604051929450606093507fe985e9c50000000000000000000000000000000000000000000000000000000092612c0a925089916001600160a01b0316906024016154f7565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060006060836001600160a01b031683604051612c8591906154c7565b600060405180830381855afa9150503d8060008114612cc0576040519150601f19603f3d011682016040523d82523d6000602084013e612cc5565b606091505b5091509150818015612cd8575080516020145b8015612cf45750612cf081600063ffffffff61399716565b6001145b612cff576000611b30565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9550505050506120c1565b6001600160e01b031981167fc339d10a0000000000000000000000000000000000000000000000000000000014156120c157507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9392505050565b6000612d906141c4565b612e218584600560009054906101000a90046001600160a01b03166001600160a01b0316631ce4c78b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612de357600080fd5b505afa158015612df7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612e1b919081019061513f565b3a613daa565b60408051600480825260a0820190925291925060609190816020015b6060815260200190600190039081612e3d57505060408051600480825260a082019092529192506060919060208201608080388339505060408051600480825260a08201909252929350606092915060208201608080388339505060408051600480825260a0820190925292935060609291506020820160808038833901905050905088610160015184600081518110612ed357fe5b60200260200101819052508783600081518110612eec57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050886000015182600081518110612f1e57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508681600081518110612f4c57fe5b60200260200101818152505088610140015184600181518110612f6b57fe5b6020026020010181905250886000015183600181518110612f8857fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508782600181518110612fb657fe5b60200260200101906001600160a01b031690816001600160a01b031681525050846000015181600181518110612fe857fe5b602002602001018181525050886101a001518460028151811061300757fe5b6020026020010181905250878360028151811061302057fe5b60200260200101906001600160a01b031690816001600160a01b03168152505088604001518260028151811061305257fe5b60200260200101906001600160a01b031690816001600160a01b03168152505084606001518160028151811061308457fe5b602002602001018181525050886101800151846003815181106130a357fe5b60200260200101819052508860000151836003815181106130c057fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508860400151826003815181106130f257fe5b60200260200101906001600160a01b031690816001600160a01b03168152505084604001518160038151811061312457fe5b60209081029190910101526040516060907fb04fbddd000000000000000000000000000000000000000000000000000000009061316b908790879087908790602401615606565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b03199094169390931790925260055491519092506060916001600160a01b0316906131d29084906154c7565b6000604051808303816000865af19150503d806000811461320f576040519150601f19603f3d011682016040523d82523d6000602084013e613214565b606091505b5091506000905061322b828263ffffffff61393016565b9050613235613a25565b6001600160e01b031982811691161415613277576000613254836109b0565b5091505060ff8116600481111561326757fe5b9950505050505050505050610dc1565b61327f6139dd565b6001600160e01b0319828116911614156132b257600061329e83610927565b509091505060ff8116600481111561326757fe5b815160208301207ff43f26ea5a94b478394a975e856464913dc1a8a1ca70939d974aa7c238aa0ce014156132f157600498505050505050505050610dc1565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615b6d565b6040516060907f94cfcdd700000000000000000000000000000000000000000000000000000000906123d89085908590602401615757565b600061336d828263ffffffff61393016565b90506001600160e01b031981167ff47261b00000000000000000000000000000000000000000000000000000000014806133d057506001600160e01b031981167f0257179200000000000000000000000000000000000000000000000000000000145b8061340457506001600160e01b031981167fa7cb5fb700000000000000000000000000000000000000000000000000000000145b8061343857506001600160e01b031981167f94cfcdd700000000000000000000000000000000000000000000000000000000145b8061346c57506001600160e01b031981167fc339d10a00000000000000000000000000000000000000000000000000000000145b6134a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615c49565b919050565b6060806060600085519050806040519080825280602002602001820160405280156134ec57816020015b6134d96141f3565b8152602001906001900390816134d15790505b50935080604051908082528060200260200182016040528015613519578160200160208202803883390190505b50925080604051908082528060200260200182016040528015613546578160200160208202803883390190505b50915060005b8181146135d65761358387828151811061356257fe5b602002602001015187838151811061357657fe5b60200260200101516135f8565b875188908590811061359157fe5b602002602001018785815181106135a457fe5b602002602001018786815181106135b757fe5b931515602094850291909101909301929092529190525260010161354c565b50509250925092565b6060806135ec84846126d5565b91506108998484610c36565b6136006141f3565b600080546040517f9d3fa4b900000000000000000000000000000000000000000000000000000000815282916001600160a01b031690639d3fa4b99061364a908890600401615ca4565b60606040518083038186803b15801561366257600080fd5b505afa158015613676573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061369a9190810190614f60565b85516000546040517fa12dcc6f00000000000000000000000000000000000000000000000000000000815292955090916001600160a01b039091169063a12dcc6f906136ec9089908990600401615cb7565b60206040518083038186803b15801561370457600080fd5b505afa158015613718573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061373c9190810190614dbe565b9150600061374f828861014001516108ff565b60a088015160c08901516101808a01516101408b01519394509192909160009161377e9163ffffffff613e2116565b156137ab576137a48461379e848d60800151613e4690919063ffffffff16565b85613e62565b9050613804565b816137bf576137a4848b6080015185613e62565b60006137d0868c61018001516108ff565b905060006137e3868d6080015187613e62565b905060006137f2838688613e62565b90506137fe82826139c7565b93505050505b61382461381e896040015185613e8c90919063ffffffff16565b826139c7565b965050505050509250925092565b600080600061384384610785613eab565b600061385c60048651876138ed9092919063ffffffff16565b8060200190516108df9190810190615184565b7ffdb6ca8d0000000000000000000000000000000000000000000000000000000090565b60006138a0836000613930565b90506001600160e01b0319808216908316146138e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615c12565b505050565b60608183111561390b5761390b61390660008585613ecf565b613eee565b8351821115613924576139246139066001848751613ecf565b50819003910190815290565b60008160040183511015613951576139516139066003855185600401613ecf565b5001602001516001600160e01b03191690565b60008160140183511015613985576139856139066004855185601401613ecf565b5001601401516001600160a01b031690565b6000610dc18383613ef6565b7f18e4b1410000000000000000000000000000000000000000000000000000000090565b60008183106139d65781610dc1565b5090919050565b7f4678472b0000000000000000000000000000000000000000000000000000000090565b7fb6555d6f0000000000000000000000000000000000000000000000000000000090565b7f488219a60000000000000000000000000000000000000000000000000000000090565b7f1b8388f70000000000000000000000000000000000000000000000000000000090565b7fe94a7ed00000000000000000000000000000000000000000000000000000000090565b7f4ad312750000000000000000000000000000000000000000000000000000000090565b606081831115613ace57613ace61390660008585613ecf565b8351821115613ae757613ae76139066001848751613ecf565b8282036040519080825280601f01601f191660200182016040528015613b14576020820181803883390190505b509050610dc1613b2382613f20565b84613b2d87613f20565b018351613f26565b6060806060613b516004855186613ab59092919063ffffffff16565b8060200190516109619190810190614c65565b60408051600180825281830190925260609182918291816020015b613b87614131565b815260200190600190039081613b7f5750506040805160018082528183019092529194506020808301908038833901905050604080516001808252818301909252919350816020015b6060815260200190600190039081613bd05750508451909150613bfd90859060049063ffffffff613ab516565b806020019051613c1091908101906150ec565b85600081518110613c1d57fe5b6020026020010185600081518110613c3157fe5b6020026020010185600081518110613c4557fe5b6020908102919091010192909252919052529193909250565b604080516001808252818301909252606091829182916020808301908038833950508551919350613c9a9186915060049063ffffffff613ab516565b806020019051613cad9190810190614cdf565b84518590600090613cba57fe5b60209081029190910101919091529095929450925050565b7f11c7b7200000000000000000000000000000000000000000000000000000000090565b7fa15c0d060000000000000000000000000000000000000000000000000000000090565b7f7e5a23180000000000000000000000000000000000000000000000000000000090565b7f5bd0428d0000000000000000000000000000000000000000000000000000000090565b7f20d11f610000000000000000000000000000000000000000000000000000000090565b7ff59851840000000000000000000000000000000000000000000000000000000090565b613db26141c4565b6020810184905260a08501516080860151613dce918691613fcb565b815260a085015160c0860151613de5918691613fcb565b604082015260a085015160e0860151613dff918691613fcb565b6060820152613e14828463ffffffff613fff16565b6080820152949350505050565b600081518351148015610dc15750508051602091820120825192909101919091201490565b600082820183811015610dc157610dc16139066000868661402c565b6000613e8483613e78868563ffffffff613fff16565b9063ffffffff61404b16565b949350505050565b600082821115613ea557613ea56139066002858561402c565b50900390565b7fe53c76c80000000000000000000000000000000000000000000000000000000090565b6060632800659560e01b848484604051602401610d7793929190615a7b565b805160208201fd5b60008160200183511015613f1757613f176139066005855185602001613ecf565b50016020015190565b60200190565b6020811015613f50576001816020036101000a0380198351168185511680821786525050506138e8565b82821415613f5d576138e8565b82821115613f975760208103905080820181840181515b82851015613f8f578451865260209586019590940193613f74565b9052506138e8565b60208103905080820181840183515b81861215613fc25782518252601f199283019290910190613fa6565b85525050505050565b6000613fd8848484614075565b15613feb57613feb6139068585856140db565b613e8483613e78868563ffffffff613fff16565b60008261400e57506000610921565b8282028284828161401b57fe5b0414610dc157610dc1613906600186865b606063e946c1bb60e01b848484604051602401610d7793929190615a0a565b600081614061576140616139066003858561402c565b600082848161406c57fe5b04949350505050565b600082614087576140876139066140fa565b811580614092575083155b1561409f57506000610dc1565b600083806140a957fe5b85840990506140be858463ffffffff613fff16565b6140d0826103e863ffffffff613fff16565b101595945050505050565b606063339f3de260e01b848484604051602401610d7793929190615ce5565b60408051808201909152600481527fa791837c00000000000000000000000000000000000000000000000000000000602082015290565b604051806101c0016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001606081525090565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b803561092181615dc1565b805161092181615dc1565b600082601f830112614239578081fd5b813561424c61424782615d22565b615cfb565b81815291506020808301908481018184028601820187101561426d57600080fd5b60005b848110156120bc57813561428381615dc1565b84529282019290820190600101614270565b600082601f8301126142a5578081fd5b81516142b361424782615d22565b8181529150602080830190840160005b838110156142f0576142db8760208451890101614515565b835260209283019291909101906001016142c3565b5050505092915050565b600082601f83011261430a578081fd5b813561431861424782615d22565b8181529150602080830190840160005b838110156142f05761434087602084358901016144c7565b83526020928301929190910190600101614328565b600082601f830112614365578081fd5b815161437361424782615d22565b8181529150602080830190840160005b838110156142f05761439b87602084518901016146aa565b83526020928301929190910190600101614383565b600082601f8301126143c0578081fd5b81356143ce61424782615d22565b8181529150602080830190840160005b838110156142f0576143f6876020843589010161455b565b835260209283019291909101906001016143de565b600082601f83011261441b578081fd5b815161442961424782615d22565b81815291506020808301908481018184028601820187101561444a57600080fd5b60005b848110156120bc5781518452928201929082019060010161444d565b600082601f830112614479578081fd5b813561448761424782615d22565b8181529150602080830190848101818402860182018710156144a857600080fd5b60005b848110156120bc578135845292820192908201906001016144ab565b600082601f8301126144d7578081fd5b81356144e561424782615d42565b91508082528360208285010111156144fc57600080fd5b8060208401602084013760009082016020015292915050565b600082601f830112614525578081fd5b815161453361424782615d42565b915080825283602082850101111561454a57600080fd5b6120c1816020840160208601615d66565b60006101c080838503121561456e578182fd5b61457781615cfb565b9150506145848383614213565b81526145938360208401614213565b60208201526145a58360408401614213565b60408201526145b78360608401614213565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e08201526101008083013581830152506101208083013581830152506101408083013567ffffffffffffffff8082111561461957600080fd5b614625868387016144c7565b8385015261016092508285013591508082111561464157600080fd5b61464d868387016144c7565b8385015261018092508285013591508082111561466957600080fd5b614675868387016144c7565b838501526101a092508285013591508082111561469157600080fd5b5061469e858286016144c7565b82840152505092915050565b60006101c08083850312156146bd578182fd5b6146c681615cfb565b9150506146d3838361421e565b81526146e2836020840161421e565b60208201526146f4836040840161421e565b6040820152614706836060840161421e565b60608201526080820151608082015260a082015160a082015260c082015160c082015260e082015160e08201526101008083015181830152506101208083015181830152506101408083015167ffffffffffffffff8082111561476857600080fd5b61477486838701614515565b8385015261016092508285015191508082111561479057600080fd5b61479c86838701614515565b838501526101809250828501519150808211156147b857600080fd5b6147c486838701614515565b838501526101a09250828501519150808211156147e057600080fd5b5061469e85828601614515565b805160ff8116811461092157600080fd5b60006020828403121561480f578081fd5b8135610dc181615dc1565b6000806040838503121561482c578081fd5b825161483781615dc1565b602084015190925061484881615dc1565b809150509250929050565b600080600060608486031215614867578081fd5b835161487281615dc1565b602085015190935061488381615dc1565b80925050604084015190509250925092565b6000806000606084860312156148a9578081fd5b83516148b481615dc1565b602085015190935067ffffffffffffffff8111156148d0578182fd5b6148dc86828701614515565b925050604084015190509250925092565b60008060008060808587031215614902578182fd5b845161490d81615dc1565b602086015190945067ffffffffffffffff8082111561492a578384fd5b61493688838901614515565b9450604087015191508082111561494b578384fd5b61495788838901614515565b9350606087015191508082111561496c578283fd5b5061497987828801614515565b91505092959194509250565b60008060408385031215614997578182fd5b82356149a281615dc1565b9150602083013567ffffffffffffffff8111156149bd578182fd5b6149c9858286016142fa565b9150509250929050565b600080600080608085870312156149e8578182fd5b84356149f381615dc1565b9350602085013567ffffffffffffffff80821115614a0f578384fd5b614a1b88838901614469565b94506040870135915080821115614a30578384fd5b614a3c88838901614469565b93506060870135915080821115614a51578283fd5b50614979878288016144c7565b60008060408385031215614a70578182fd5b8235614a7b81615dc1565b9150602083013567ffffffffffffffff811115614a96578182fd5b6149c9858286016144c7565b600080600060608486031215614ab6578081fd5b8335614ac181615dc1565b9250602084013567ffffffffffffffff811115614adc578182fd5b614ae8868287016144c7565b925050604084013590509250925092565b60008060408385031215614b0b578182fd5b8235614b1681615dc1565b946020939093013593505050565b600060208284031215614b35578081fd5b813567ffffffffffffffff811115614b4b578182fd5b613e8484828501614229565b600060208284031215614b68578081fd5b815167ffffffffffffffff811115614b7e578182fd5b613e8484828501614355565b600080600060608486031215614b9e578081fd5b833567ffffffffffffffff80821115614bb5578283fd5b614bc1878388016143b0565b94506020860135915080821115614bd6578283fd5b614be287838801614229565b93506040860135915080821115614bf7578283fd5b50614c0486828701614469565b9150509250925092565b60008060408385031215614c20578182fd5b823567ffffffffffffffff80821115614c37578384fd5b614c43868387016143b0565b93506020850135915080821115614c58578283fd5b506149c9858286016142fa565b600080600060608486031215614c79578081fd5b835167ffffffffffffffff80821115614c90578283fd5b614c9c87838801614355565b94506020860151915080821115614cb1578283fd5b614cbd8783880161440b565b93506040860151915080821115614cd2578283fd5b50614c0486828701614295565b600080600060608486031215614cf3578081fd5b835167ffffffffffffffff80821115614d0a578283fd5b614d1687838801614355565b9450602086015193506040860151915080821115614cd2578283fd5b60008060408385031215614d44578182fd5b823567ffffffffffffffff80821115614d5b578384fd5b614c4386838701614469565b60008060408385031215614d79578182fd5b825167ffffffffffffffff80821115614d90578384fd5b614d9c8683870161440b565b93506020850151915080821115614db1578283fd5b506149c985828601614295565b600060208284031215614dcf578081fd5b81518015158114610dc1578182fd5b60008060008060808587031215614df3578182fd5b845193506020850151614e0581615dc1565b604086015190935067ffffffffffffffff8082111561494b578384fd5b60008060408385031215614e34578182fd5b505080516020909101519092909150565b60008060408385031215614e57578182fd5b82519150602083015167ffffffffffffffff811115614e74578182fd5b6149c985828601614515565b600080600060608486031215614e94578081fd5b83519250602084015167ffffffffffffffff80821115614eb2578283fd5b614ebe87838801614515565b93506040860151915080821115614ed3578283fd5b50614c0486828701614515565b60008060408385031215614ef2578182fd5b82519150602083015161484881615dd6565b60008060408385031215614f16578182fd5b82516001600160e01b031981168114614837578283fd5b600060208284031215614f3e578081fd5b813567ffffffffffffffff811115614f54578182fd5b613e84848285016144c7565b60006060828403128015614f72578182fd5b8015614f7c578182fd5b50614f876060615cfb565b614f9184846147ed565b815260208301516020820152604083015160408201528091505092915050565b600060208284031215614fc2578081fd5b815167ffffffffffffffff811115614fd8578182fd5b613e84848285016146aa565b600080600060608486031215614ff8578081fd5b833567ffffffffffffffff81111561500e578182fd5b61501a8682870161455b565b935050602084013561502b81615dc1565b929592945050506040919091013590565b6000806040838503121561504e578182fd5b823567ffffffffffffffff80821115615065578384fd5b6150718683870161455b565b93506020850135915080821115615086578283fd5b506149c9858286016144c7565b600080600080608085870312156150a8578182fd5b845167ffffffffffffffff808211156150bf578384fd5b6150cb888389016146aa565b955060208701519150808211156150e0578384fd5b614936888389016146aa565b600080600060608486031215615100578081fd5b835167ffffffffffffffff80821115615117578283fd5b615123878388016146aa565b9450602086015193506040860151915080821115614ed3578283fd5b600060208284031215615150578081fd5b5051919050565b60008060408385031215615169578182fd5b825161517481615dd6565b6020939093015192949293505050565b600080600060608486031215615198578081fd5b83516151a381615dd6565b6020850151604086015191945092506151bb81615dc1565b809150509250925092565b600080600080608085870312156151db578182fd5b6151e586866147ed565b93506020850151925060408501516151fc81615dc1565b606086015190925067ffffffffffffffff811115615218578182fd5b61497987828801614515565b600080600060608486031215615238578081fd5b61524285856147ed565b925060208401519150604084015167ffffffffffffffff811115615264578182fd5b614c0486828701614515565b600080600060608486031215615284578081fd5b61528e85856147ed565b925060208401519150604084015190509250925092565b6001600160a01b03169052565b6000815180845260208401935060208301825b828110156152ec5781516001600160a01b03168652602095860195909101906001016152c5565b5093949350505050565b600081518084526020840180819550602083028101915060208501845b8481101561534157828403885261532b84835161537e565b6020988901989094509190910190600101615313565b50919695505050505050565b6000815180845260208401935060208301825b828110156152ec578151865260209586019590910190600101615360565b60008151808452615396816020860160208601615d66565b601f01601f19169290920160200192915050565b805160ff16825260208082015190830152604090810151910152565b60006101c06153d68484516152a5565b60208301516153e860208601826152a5565b5060408301516153fb60408601826152a5565b50606083015161540e60608601826152a5565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e08501526101008084015181860152506101208084015181860152506101408084015182828701526154678387018261537e565b91505061016091508184015185820383870152615484828261537e565b9250505061018080840151858303828701526154a0838261537e565b9150506101a0915081840151858203838701526154bd828261537e565b9695505050505050565b600082516154d9818460208701615d66565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60006001600160a01b038616825260806020830152615557608083018661534d565b8281036040840152615569818661534d565b838103606085015261557b818661537e565b98975050505050505050565b60006001600160a01b0385168252606060208301526155a9606083018561537e565b9050826040830152949350505050565b60006001600160a01b0386168252608060208301526155db608083018661537e565b8281036040840152615569818661537e565b6001600160a01b03929092168252602082015260400190565b60006080825261561960808301876152f6565b828103602084015261562b81876152b2565b838103604085015261563d81876152b2565b9150508281036060840152615652818561534d565b979650505050505050565b602080825282518282018190526000918401906040840190835b8181101561569e57835161568a81615db7565b835260209384019390920191600101615677565b509095945050505050565b606080825284519082018190526000906020906080840190828801845b828110156156ec576156d98483516153aa565b60609390930192908401906001016156c6565b50505083810382850152615700818761534d565b84810360408601528551808252908301915082860190845b81811015615736578251151584529284019291840191600101615718565b509198975050505050505050565b600060208252610dc1602083018461534d565b60006040825261576a604083018561534d565b828103602084015261577c81856152f6565b95945050505050565b600060408252615798604083018561534d565b828103602084015261577c818561534d565b60008582526001600160a01b0385166020830152608060408301526157d2608083018561537e565b8281036060840152615652818561537e565b918252602082015260400190565b600083825260406020830152613e84604083018461537e565b600084825260606020830152615824606083018561537e565b82810360408401526154bd818561537e565b8281526040810161584683615dad565b8260208301529392505050565b6001600160e01b031991909116815260200190565b6001600160e01b03199290921682526001600160a01b0316602082015260400190565b60006001600160e01b0319871682526001600160a01b038616602083015260a060408301526158bd60a083018661534d565b82810360608401526158cf818661534d565b83810360808501526158e1818661537e565b9998505050505050505050565b60006001600160e01b0319861682526001600160a01b038516602083015260806040830152615920608083018561537e565b905082606083015295945050505050565b6001600160e01b03199390931683526001600160a01b03919091166020830152604082015260600190565b60006001600160e01b0319851682526060602083015261597f606083018561534d565b82810360408401526154bd81856152f6565b600060208252610dc1602083018461537e565b6000608082526159b7608083018761537e565b6001600160a01b03958616602084015293909416604082015260ff9190911660609091015292915050565b60006159ed85615d96565b8482528360208301526060604083015261577c606083018461537e565b6060810160048510615a1857fe5b938152602081019290925260409091015290565b60608101615a3985615da3565b93815260208101929092526001600160a01b031660409091015290565b6040810160048410615a6457fe5b9281526020015290565b60608101615a1885615da3565b6060810160088510615a1857fe5b60208101615a9683615db7565b91905290565b6000615aa786615dad565b8582528460208301526001600160a01b0384166040830152608060608301526154bd608083018461537e565b60408101615a6484615d96565b600060808252615af3608083018761537e565b602083820381850152818751808452828401915082838202850101838a01865b83811015615b4157601f19878403018552615b2f8383516153c6565b94860194925090850190600101615b13565b50508681036040880152615b55818a61534d565b945050505050828103606084015261565281856152f6565b60208082526013908201527f554e4b4e4f574e5f52455455524e5f4441544100000000000000000000000000604082015260600190565b60208082526019908201527f554e4b4e4f574e5f46554e4354494f4e5f53454c4543544f5200000000000000604082015260600190565b6020808252600d908201527f554e494d504c454d454e54454400000000000000000000000000000000000000604082015260600190565b6020808252600c908201527f4241445f53454c4543544f520000000000000000000000000000000000000000604082015260600190565b6020808252600e908201527f57524f4e475f50524f58595f4944000000000000000000000000000000000000604082015260600190565b60a08101615c8e82866153aa565b8360608301528215156080830152949350505050565b600060208252610dc160208301846153c6565b600060408252615cca60408301856153c6565b828103602084015261577c818561537e565b90815260200190565b9283526020830191909152604082015260600190565b60405181810167ffffffffffffffff81118282101715615d1a57600080fd5b604052919050565b600067ffffffffffffffff821115615d38578081fd5b5060209081020190565b600067ffffffffffffffff821115615d58578081fd5b50601f01601f191660200190565b60005b83811015615d81578181015183820152602001615d69565b83811115615d90576000848401525b50505050565b60028110615da057fe5b50565b60038110615da057fe5b60078110615da057fe5b60058110615da057fe5b6001600160a01b0381168114615da057600080fd5b60ff81168114615da057600080fdfea365627a7a723158209bd08114ba2e3dada6fb089e11dba7dc3bfedf454a0bac82e7a05d67b08360dd6c6578706572696d656e74616cf564736f6c634300050c0040" + "object": "0x60806040523480156200001157600080fd5b5060405162005f1338038062005f138339810160408190526200003491620004c6565b600080546001600160a01b0319166001600160a01b03838116919091178083556040517f607041080000000000000000000000000000000000000000000000000000000081528493928392859283929190911690636070410890620000be907ff47261b00000000000000000000000000000000000000000000000000000000090600401620004f6565b60206040518083038186803b158015620000d757600080fd5b505afa158015620000ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620001129190810190620004c6565b600180546001600160a01b0319166001600160a01b039283161790556000546040517f6070410800000000000000000000000000000000000000000000000000000000815291169063607041089062000190907f025717920000000000000000000000000000000000000000000000000000000090600401620004f6565b60206040518083038186803b158015620001a957600080fd5b505afa158015620001be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620001e49190810190620004c6565b600280546001600160a01b0319166001600160a01b039283161790556000546040517f6070410800000000000000000000000000000000000000000000000000000000815291169063607041089062000262907fa7cb5fb70000000000000000000000000000000000000000000000000000000090600401620004f6565b60206040518083038186803b1580156200027b57600080fd5b505afa15801562000290573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620002b69190810190620004c6565b600380546001600160a01b0319166001600160a01b039283161790556000546040517f6070410800000000000000000000000000000000000000000000000000000000815291169063607041089062000334907fc339d10a0000000000000000000000000000000000000000000000000000000090600401620004f6565b60206040518083038186803b1580156200034d57600080fd5b505afa15801562000362573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620003889190810190620004c6565b600480546001600160a01b0319166001600160a01b03928316179055600092508316159050620003b95781620003bb565b305b9050620004406040518060400160405280600b81526020017f30782050726f746f636f6c0000000000000000000000000000000000000000008152506040518060400160405280600581526020017f332e302e3000000000000000000000000000000000000000000000000000000081525085846200046f60201b620035c91760201c565b6005555050600680546001600160a01b0319166001600160a01b03939093169290921790915550620005239050565b8351602094850120835193850193909320604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f815295860194909452928401929092526060830152608082015260a0902090565b600060208284031215620004d8578081fd5b81516001600160a01b0381168114620004ef578182fd5b9392505050565b7fffffffff0000000000000000000000000000000000000000000000000000000091909116815260200190565b6159e080620005336000396000f3fe608060405234801561001057600080fd5b50600436106102e95760003560e01c80639a7e752611610191578063ca49f47c116100e3578063d3d862d111610097578063e4e6e7da11610071578063e4e6e7da14610760578063e77286eb14610781578063ee4f5a94146107a3576102e9565b8063d3d862d11461070b578063d46950281461071e578063e25cabf71461073e576102e9565b8063d001c5dc116100c8578063d001c5dc146106c5578063d186037f146106d8578063d3637905146106eb576102e9565b8063ca49f47c14610681578063cafd3a07146106a4576102e9565b8063a6627e9f11610145578063bbb2dcf61161011f578063bbb2dcf614610636578063bc03f96414610658578063c26cfecd14610679576102e9565b8063a6627e9f146105ed578063acaedc7414610600578063b43cffe114610623576102e9565b8063a070cac811610176578063a070cac8146105a7578063a0901e51146105ba578063a5cd62ba146105cd576102e9565b80639a7e7526146105605780639eadc83514610583576102e9565b806346eb65cb1161024a5780636f83188e116101fe5780637b66ad34116101d85780637b66ad34146105195780637d7275121461053a5780638f4ce4791461054d576102e9565b80636f83188e146104c25780637914b2ec146104e557806379c9c42614610506576102e9565b8063590aa8751161022f578063590aa8751461046d57806363eb39921461048d57806365129042146104a0576102e9565b806346eb65cb146104385780634dfdac201461044d576102e9565b8063314853ff116102a157806332aae3ad1161028657806332aae3ad146103d25780633db6dc61146103f4578063459be5e214610417576102e9565b8063314853ff1461039d578063327d3054146103bf576102e9565b80630d7b7d76116102d25780630d7b7d761461033a578063165979e11461035b5780632322cf761461037d576102e9565b806302d0aec3146102ee57806304a5618a14610318575b600080fd5b6103016102fc3660046149e0565b6107c5565b60405161030f9291906153ec565b60405180910390f35b61032b6103263660046149e0565b610821565b60405161030f939291906154e7565b61034d610348366004614511565b61089c565b60405161030f92919061539a565b61036e6103693660046149e0565b6108be565b60405161030f93929190615622565b61039061038b366004614511565b61091b565b60405161030f9190615357565b6103b06103ab3660046149e0565b610943565b60405161030f939291906153c1565b61034d6103cd3660046149e0565b61098a565b6103e56103e03660046149e0565b6109cc565b60405161030f93929190615598565b6104076104023660046149e0565b610a1f565b60405161030f9493929190615360565b61042a6104253660046149e0565b610a69565b60405161030f92919061560b565b61044b6104463660046149e0565b610abf565b005b61046061045b366004614438565b610bbb565b60405161030f91906152f1565b61048061047b3660046142b1565b610c3e565b60405161030f9190615547565b61048061049b366004614555565b610c95565b6104b36104ae3660046149e0565b610cf2565b60405161030f939291906150bf565b6104d56104d03660046149e0565b610d2c565b60405161030f9493929190615696565b6104f86104f33660046149e0565b6115e1565b60405161030f92919061541e565b610390610514366004614c3f565b611619565b61052c6105273660046149e0565b6116a2565b60405161030f9291906150a5565b610390610548366004614511565b6116da565b6104f861055b3660046149e0565b611cc1565b61057361056e3660046149e0565b611d1e565b60405161030f9493929190615652565b6105966105913660046149e0565b611d7f565b60405161030f959493929190615441565b6103906105b5366004614b3a565b611df7565b6104606105c83660046145d7565b611e78565b6105e06105db36600461463d565b611ef1565b60405161030f919061520b565b6104806105fb3660046145ac565b611fb4565b61061361060e3660046149e0565b61200d565b60405161030f9493929190615167565b610480610631366004614486565b612049565b6106496106443660046149e0565b6120a8565b60405161030f93929190615512565b61066b6106663660046149e0565b612122565b60405161030f9291906153a8565b61039061215b565b61069461068f3660046149e0565b612161565b60405161030f94939291906154a4565b6106b76106b23660046149e0565b6121df565b60405161030f929190615689565b6104606106d3366004614438565b61222d565b6103906106e6366004614511565b61229b565b6106fe6106f9366004614a8b565b612757565b60405161030f919061563d565b6104806107193660046147e5565b612cc5565b61073161072c3660046149e0565b612ce4565b60405161030f9190615409565b61075161074c3660046146c1565b612d94565b60405161030f93929190615256565b61077361076e366004614438565b612ecc565b60405161030f929190615332565b61079461078f366004614ae3565b612ee5565b60405161030f93929190615836565b6107b66107b13660046149e0565b61311f565b60405161030f939291906155e1565b6000806107d9836107d461315c565b613180565b60006107f260048551866131c09092919063ffffffff16565b8060200190516108059190810190614993565b909350905060ff8116600681111561081957fe5b915050915091565b60008080610835848263ffffffff61320316565b92506001600160e01b0319831663012b8bc960e11b146108705760405162461bcd60e51b8152600401610867906157ff565b60405180910390fd5b61088184601063ffffffff61323716565b915061089484602463ffffffff61326a16565b929491935050565b6000806108a984846116da565b91506108b5848461229b565b90509250929050565b60008060006108cf846107d4613276565b60006108e860048651876131c09092919063ffffffff16565b8060200190516108fb9190810190614e1e565b9094509250905060ff8116600281111561091157fe5b9350509193909250565b600080600061092a858561089c565b91509150610938828261329a565b925050505b92915050565b6000606080610954846107d46132b0565b835161096a90859060049063ffffffff6131c016565b80602001905161097d9190810190614933565b9196909550909350915050565b600080610999836107d46132d4565b82516109af90849060049063ffffffff6131c016565b8060200190516109c291908101906148d5565b9094909350915050565b60008060606109dd846107d46132f8565b60006109f660048651876131c09092919063ffffffff16565b806020019051610a099190810190614dd2565b9094509250905060ff8116600181111561091157fe5b600080606080610a31856107d461331c565b8451610a4790869060049063ffffffff6131c016565b806020019051610a5a9190810190614891565b92989197509550909350915050565b600080610a78836107d4613340565b6000610a9160048551866131c09092919063ffffffff16565b806020019051610aa49190810190614d10565b9250905060ff81166003811115610ab757fe5b925050915091565b6000610ad1828263ffffffff61320316565b90506001600160e01b03198116630f47261b60e41b1415610afc57610af582611cc1565b5050610bb7565b6001600160e01b0319811663012b8bc960e11b1415610b2657610b1e82610821565b505050610bb7565b6001600160e01b0319811663a7cb5fb760e01b1415610b5257610b4882611d7f565b5050505050610bb7565b6001600160e01b031981166394cfcdd760e01b1415610b7457610b1e826120a8565b6001600160e01b0319811663619ce88560e11b1415610b9f57610b9682612161565b50505050610bb7565b60405162461bcd60e51b8152600401610867906157ff565b5050565b606060008251905080604051908082528060200260200182016040528015610bed578160200160208202803883390190505b50915060005b818114610c3657610c1785858381518110610c0a57fe5b602002602001015161229b565b838281518110610c2357fe5b6020908102919091010152600101610bf3565b505092915050565b604051606090630f47261b60e41b90610c5b908490602401615091565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915290505b919050565b60405160609063619ce88560e11b90610cb690869086908690602401615135565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915290505b9392505050565b6000806000610d03846107d4613364565b8351610d1990859060049063ffffffff6131c016565b80602001905161097d9190810190614306565b60608080806000610d43868263ffffffff61320316565b90506001600160e01b0319811663dedfc1f160e01b1415610d9b576040518060400160405280601181526020017f626174636843616e63656c4f726465727300000000000000000000000000000081525094506111e3565b6001600160e01b03198116634b4a520160e11b1415610df1576040518060400160405280600f81526020017f626174636846696c6c4f7264657273000000000000000000000000000000000081525094506111e3565b6001600160e01b031981166323aa37f960e21b1415610e47576040518060400160405280601681526020017f626174636846696c6c4f72646572734e6f5468726f770000000000000000000081525094506111e3565b6001600160e01b03198116632fbb8b8560e21b1415610e9d576040518060400160405280601581526020017f626174636846696c6c4f724b696c6c4f7264657273000000000000000000000081525094506111e3565b6001600160e01b03198116632da6298760e01b1415610ef3576040518060400160405280600b81526020017f63616e63656c4f7264657200000000000000000000000000000000000000000081525094506111e3565b6001600160e01b03198116634da26aab60e11b1415610f49576040518060400160405280600981526020017f66696c6c4f72646572000000000000000000000000000000000000000000000081525094506111e3565b6001600160e01b03198116633852d63160e21b1415610f9f576040518060400160405280600f81526020017f66696c6c4f724b696c6c4f72646572000000000000000000000000000000000081525094506111e3565b6001600160e01b031981166378d29ac160e01b1415610ff5576040518060400160405280601681526020017f6d61726b65744275794f72646572734e6f5468726f770000000000000000000081525094506111e3565b6001600160e01b0319811663369da09960e01b141561104b576040518060400160405280601781526020017f6d61726b657453656c6c4f72646572734e6f5468726f7700000000000000000081525094506111e3565b6001600160e01b03198116638bc8efb360e01b14156110a1576040518060400160405280601981526020017f6d61726b65744275794f726465727346696c6c4f724b696c6c0000000000000081525094506111e3565b6001600160e01b0319811663a6c3bf3360e01b14156110f7576040518060400160405280601a81526020017f6d61726b657453656c6c4f726465727346696c6c4f724b696c6c00000000000081525094506111e3565b6001600160e01b031981166388ec79fb60e01b141561114d576040518060400160405280600b81526020017f6d617463684f726465727300000000000000000000000000000000000000000081525094506111e3565b6001600160e01b031981167f4f9559b10000000000000000000000000000000000000000000000000000000014806111ae57506001600160e01b031981167f2280c91000000000000000000000000000000000000000000000000000000000145b156111cb5760405162461bcd60e51b815260040161086790615791565b60405162461bcd60e51b81526004016108679061575a565b6001600160e01b0319811663dedfc1f160e01b141561126f57855161121290879060049063ffffffff61338816565b806020019051611225919081019061460a565b604080516000808252602082019092529195505b5060408051600080825260208201909252919450611267565b60608152602001906001900390816112525790505b5091506115d9565b6001600160e01b03198116632fbb8b8560e21b148061129e57506001600160e01b03198116634b4a520160e11b145b806112b957506001600160e01b031981166323aa37f960e21b145b156112d3576112c786613408565b919550935091506115d9565b6001600160e01b03198116632da6298760e01b14156113a25760408051600180825281830190925290816020015b611309613be4565b815260200190600190039081611301575050865190945061133490879060049063ffffffff61338816565b8060200190516113479190810190614a58565b8460008151811061135457fe5b60200260200101819052506000604051908082528060200260200182016040528015611239578160200160208202803883390190505060408051600080825260208201909252919450611267565b6001600160e01b03198116633852d63160e21b14806113d157506001600160e01b03198116634da26aab60e11b145b156113df576112c786613437565b6001600160e01b031981166378d29ac160e01b148061140e57506001600160e01b0319811663369da09960e01b145b8061142957506001600160e01b03198116638bc8efb360e01b145b8061144457506001600160e01b0319811663a6c3bf3360e01b145b15611452576112c786613531565b6001600160e01b031981166388ec79fb60e01b14156115d957611473613be4565b61147b613be4565b60608061149560048b518c6133889092919063ffffffff16565b8060200190516114a89190810190614b93565b604080516002808252606082019092529498509296509094509250816020015b6114d0613be4565b8152602001906001900390816114c857905050975083886000815181106114f357fe5b6020026020010181905250828860018151811061150c57fe5b602090810291909101015260408051600280825260608201909252908160200160208202803883390190505096508360a001518760008151811061154c57fe5b6020026020010181815250508260a001518760018151811061156a57fe5b60209081029190910101526040805160028082526060820190925290816020015b606081526020019060019003908161158b57905050955081866000815181106115b057fe5b602002602001018190525080866001815181106115c957fe5b6020026020010181905250505050505b509193509193565b6000806115f0836107d46135a5565b825161160690849060049063ffffffff6131c016565b8060200190516109c291908101906149b7565b600061169a846116956040518060400160405280600b81526020017f30782050726f746f636f6c0000000000000000000000000000000000000000008152506040518060400160405280600581526020017f332e302e3000000000000000000000000000000000000000000000000000000081525087876135c9565b613620565b949350505050565b6000806116b1836107d4613634565b82516116c790849060049063ffffffff6131c016565b8060200190516109c291908101906142cd565b6000806116ed838263ffffffff61320316565b90506001600160e01b03198116630f47261b60e41b141561181f57600061171b84601063ffffffff61323716565b6040519091506060907f70a082310000000000000000000000000000000000000000000000000000000090611754908890602401615091565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060836001600160a01b0316836040516117a59190615075565b600060405180830381855afa9150503d80600081146117e0576040519150601f19603f3d011682016040523d82523d6000602084013e6117e5565b606091505b50915091508180156117f8575080516020145b611803576000611814565b61181481600063ffffffff61326a16565b955050505050611cba565b6001600160e01b0319811663012b8bc960e11b14156119775760008061184485610821565b6040519194509250606091507f6352211e0000000000000000000000000000000000000000000000000000000090611880908490602401615357565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060846001600160a01b0316836040516118d19190615075565b600060405180830381855afa9150503d806000811461190c576040519150601f19603f3d011682016040523d82523d6000602084013e611911565b606091505b50915091506000828015611926575081516020145b611931576000611942565b61194282600c63ffffffff61323716565b9050896001600160a01b0316816001600160a01b031614611964576000611967565b60015b60ff169750505050505050611cba565b6001600160e01b0319811663a7cb5fb760e01b1415611b1757600060608061199e86611d7f565b5081519296509094509250905060005b818114611b0d5783516060907efdd58e00000000000000000000000000000000000000000000000000000000908b908790859081106119e957fe5b6020026020010151604051602401611a0292919061519b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060876001600160a01b031683604051611a539190615075565b600060405180830381855afa9150503d8060008114611a8e576040519150601f19603f3d011682016040523d82523d6000602084013e611a93565b606091505b50915091506000828015611aa8575081516020145b611ab3576000611ac4565b611ac482600063ffffffff61326a16565b90506000878681518110611ad457fe5b60200260200101518281611ae457fe5b0490508b811080611af357508b155b15611afc57809b505b5050600190930192506119ae915050565b5050505050611cba565b6001600160e01b0319811663619ce88560e11b1415611c1c576040516060907fa85e59e40000000000000000000000000000000000000000000000000000000090611b6d9086906000908190819060240161555a565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925260045491519092506000916001600160a01b031690611bbf908490615075565b600060405180830381855afa9150503d8060008114611bfa576040519150601f19603f3d011682016040523d82523d6000602084013e611bff565b606091505b5050905080611c0f576000611c13565b6000195b93505050611cba565b6001600160e01b031981166394cfcdd760e01b1415611cba57606080611c41856120a8565b80519194509250905060005b818114611cb5576000611c7389858481518110611c6657fe5b60200260200101516116da565b90506000858381518110611c8357fe5b60200260200101518281611c9357fe5b04905087811080611ca2575087155b15611cab578097505b5050600101611c4d565b505050505b5092915050565b600080611cd4838263ffffffff61320316565b91506001600160e01b03198216630f47261b60e41b14611d065760405162461bcd60e51b8152600401610867906157ff565b611d1783601063ffffffff61323716565b9050915091565b60008060006060611d31856107d4613658565b6000611d4a60048751886131c09092919063ffffffff16565b806020019051611d5d9190810190614d74565b91965094509250905060ff81166006811115611d7557fe5b9450509193509193565b60008060608080611d96868563ffffffff61320316565b94506001600160e01b0319851663a7cb5fb760e01b14611dc85760405162461bcd60e51b8152600401610867906157ff565b505050506024828101516044840151606485015160848601519496929591820184019490820184019391010190565b600061169a84611e736040518060400160405280600b81526020017f30782050726f746f636f6c0000000000000000000000000000000000000000008152506040518060400160405280600581526020017f332e302e3000000000000000000000000000000000000000000000000000000081525087876135c9565b61367c565b6060808251604051908082528060200260200182016040528015611ea6578160200160208202803883390190505b50905060005b83518114611cba57838181518110611ec057fe5b60200260200101516001600160a01b031631828281518110611ede57fe5b6020908102919091010152600101611eac565b606060008451905080604051908082528060200260200182016040528015611f23578160200160208202803883390190505b50915060005b818114611fab57611f74868281518110611f3f57fe5b6020026020010151868381518110611f5357fe5b6020026020010151868481518110611f6757fe5b6020026020010151612757565b838281518110611f8057fe5b60200260200101906004811115611f9357fe5b90816004811115611fa057fe5b905250600101611f29565b50509392505050565b60405160609063012b8bc960e11b90611fd3908590859060240161519b565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905092915050565b60006060806060612020856107d461368b565b845161203690869060049063ffffffff6131c016565b806020019051610a5a91908101906143a0565b60405160609063a7cb5fb760e01b9061206c9087908790879087906024016150e3565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050949350505050565b60006060806120bd848463ffffffff61320316565b92506001600160e01b031983166394cfcdd760e01b146120ef5760405162461bcd60e51b8152600401610867906157ff565b835161210590859060049063ffffffff61338816565b806020019051612118919081019061481a565b9395909450915050565b60006060612132836107d46136af565b825161214890849060049063ffffffff6131c016565b8060200190516109c291908101906148f8565b60055481565b600080606081612177858263ffffffff61320316565b93506001600160e01b0319841663619ce88560e11b146121a95760405162461bcd60e51b8152600401610867906157ff565b84516121bf90869060049063ffffffff61338816565b8060200190516121d29190810190614348565b9597919650949350915050565b6000806121ee836107d46136d3565b600061220760048551866131c09092919063ffffffff16565b80602001905161221a9190810190614d10565b9250905060ff81166001811115610ab757fe5b60606000825190508060405190808252806020026020018201604052801561225f578160200160208202803883390190505b50915060005b818114610c365761227c85858381518110611c6657fe5b83828151811061228857fe5b6020908102919091010152600101612265565b6000806122ae838263ffffffff61320316565b90506001600160e01b031981166394cfcdd760e01b1415612347576060806122d5856120a8565b80519194509250905060005b81811461233c5760006122fa89858481518110610c0a57fe5b9050600085838151811061230a57fe5b6020026020010151828161231a57fe5b04905087811080612329575087155b15612332578097505b50506001016122e1565b5061093d9350505050565b6001600160e01b03198116630f47261b60e41b14156123b957600061237384601063ffffffff61323716565b6001546040519192506060917fdd62ed3e00000000000000000000000000000000000000000000000000000000916117549189916001600160a01b0316906024016150a5565b6001600160e01b0319811663012b8bc960e11b1415612605576000806123de85610821565b6002546040519295509093506060925063e985e9c560e01b91612411918a916001600160a01b03909116906024016150a5565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060846001600160a01b0316836040516124629190615075565b600060405180830381855afa9150503d806000811461249d576040519150601f19603f3d011682016040523d82523d6000602084013e6124a2565b606091505b50915091508115806124b657508051602014155b806124d257506124cd81600063ffffffff61326a16565b600114155b156125f6576040516060907f081812fc000000000000000000000000000000000000000000000000000000009061250d908790602401615357565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050856001600160a01b03168160405161255a9190615075565b600060405180830381855afa9150503d8060008114612595576040519150601f19603f3d011682016040523d82523d6000602084013e61259a565b606091505b5090935091508280156125ae575081516020145b80156125dd57506002546001600160a01b03166125d283600c63ffffffff61323716565b6001600160a01b0316145b6125e85760006125eb565b60015b60ff16975050611b0d565b60001996505050505050611cba565b6001600160e01b0319811663a7cb5fb760e01b141561273357600061262984611d7f565b50506003546040519294506060935063e985e9c560e01b9261265a925089916001600160a01b0316906024016150a5565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060836001600160a01b0316836040516126ab9190615075565b600060405180830381855afa9150503d80600081146126e6576040519150601f19603f3d011682016040523d82523d6000602084013e6126eb565b606091505b50915091508180156126fe575080516020145b801561271a575061271681600063ffffffff61326a16565b6001145b612725576000611814565b600019955050505050611cba565b6001600160e01b0319811663619ce88560e11b1415611cba57506000199392505050565b6000612761613c77565b6127f28584600660009054906101000a90046001600160a01b03166001600160a01b0316631ce4c78b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156127b457600080fd5b505afa1580156127c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506127ec9190810190614cf8565b3a6136f7565b60408051600480825260a0820190925291925060609190816020015b606081526020019060019003908161280e57505060408051600480825260a082019092529192506060919060208201608080388339505060408051600480825260a08201909252929350606092915060208201608080388339505060408051600480825260a08201909252929350606092915060208201608080388339019050509050886101600151846000815181106128a457fe5b602002602001018190525087836000815181106128bd57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508860000151826000815181106128ef57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050868160008151811061291d57fe5b6020026020010181815250508861014001518460018151811061293c57fe5b602002602001018190525088600001518360018151811061295957fe5b60200260200101906001600160a01b031690816001600160a01b031681525050878260018151811061298757fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508460000151816001815181106129b957fe5b602002602001018181525050886101a00151846002815181106129d857fe5b602002602001018190525087836002815181106129f157fe5b60200260200101906001600160a01b031690816001600160a01b031681525050886040015182600281518110612a2357fe5b60200260200101906001600160a01b031690816001600160a01b031681525050846060015181600281518110612a5557fe5b60200260200101818152505088610180015184600381518110612a7457fe5b6020026020010181905250886000015183600381518110612a9157fe5b60200260200101906001600160a01b031690816001600160a01b031681525050886040015182600381518110612ac357fe5b60200260200101906001600160a01b031690816001600160a01b031681525050846040015181600381518110612af557fe5b60209081029190910101526040516060907fb04fbddd0000000000000000000000000000000000000000000000000000000090612b3c9087908790879087906024016151b4565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925260065491519092506060916001600160a01b031690612b8e908490615075565b6000604051808303816000865af19150503d8060008114612bcb576040519150601f19603f3d011682016040523d82523d6000602084013e612bd0565b606091505b50915060009050612be7828263ffffffff61320316565b9050612bf16132f8565b6001600160e01b031982811691161415612c33576000612c10836109cc565b5091505060ff81166004811115612c2357fe5b9950505050505050505050610ceb565b612c3b6132b0565b6001600160e01b031982811691161415612c6e576000612c5a83610943565b509091505060ff81166004811115612c2357fe5b815160208301207ff43f26ea5a94b478394a975e856464913dc1a8a1ca70939d974aa7c238aa0ce01415612cad57600498505050505050505050610ceb565b60405162461bcd60e51b815260040161086790615723565b6040516060906394cfcdd760e01b90611fd39085908590602401615304565b6000612cf6828263ffffffff61320316565b90506001600160e01b03198116630f47261b60e41b1480612d2757506001600160e01b0319811663012b8bc960e11b145b80612d4257506001600160e01b0319811663a7cb5fb760e01b145b80612d5d57506001600160e01b031981166394cfcdd760e01b145b80612d7857506001600160e01b0319811663619ce88560e11b145b610c905760405162461bcd60e51b8152600401610867906157ff565b606080606060008551905080604051908082528060200260200182016040528015612dd957816020015b612dc6613ca6565b815260200190600190039081612dbe5790505b50935080604051908082528060200260200182016040528015612e06578160200160208202803883390190505b50925080604051908082528060200260200182016040528015612e33578160200160208202803883390190505b50915060005b818114612ec357612e70878281518110612e4f57fe5b6020026020010151878381518110612e6357fe5b6020026020010151612ee5565b8751889085908110612e7e57fe5b60200260200101878581518110612e9157fe5b60200260200101878681518110612ea457fe5b9315156020948502919091019093019290925291905252600101612e39565b50509250925092565b606080612ed9848461222d565b91506108b58484610bbb565b612eed613ca6565b600080546040517f9d3fa4b900000000000000000000000000000000000000000000000000000000815282916001600160a01b031690639d3fa4b990612f3790889060040161585a565b60606040518083038186803b158015612f4f57600080fd5b505afa158015612f63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612f879190810190614a13565b85516000546040517fa12dcc6f00000000000000000000000000000000000000000000000000000000815292955090916001600160a01b039091169063a12dcc6f90612fd9908990899060040161586d565b60206040518083038186803b158015612ff157600080fd5b505afa158015613005573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506130299190810190614871565b9150600061303c8288610140015161091b565b60a088015160c08901516101808a01516101408b01519394509192909160009161306b9163ffffffff61376e16565b15613098576130918461308b848d6080015161379390919063ffffffff16565b856137af565b90506130f1565b816130ac57613091848b60800151856137af565b60006130bd868c610180015161091b565b905060006130d0868d60800151876137af565b905060006130df8386886137af565b90506130eb828261329a565b93505050505b61311161310b8960400151856137d190919063ffffffff16565b8261329a565b965050505050509250925092565b6000806000613130846107d46137f0565b600061314960048651876131c09092919063ffffffff16565b8060200190516108fb9190810190614d3d565b7ffdb6ca8d0000000000000000000000000000000000000000000000000000000090565b600061318d836000613203565b90506001600160e01b0319808216908316146131bb5760405162461bcd60e51b8152600401610867906157c8565b505050565b6060818311156131de576131de6131d960008585613814565b613833565b83518211156131f7576131f76131d96001848751613814565b50819003910190815290565b60008160040183511015613224576132246131d96003855185600401613814565b5001602001516001600160e01b03191690565b60008160140183511015613258576132586131d96004855185601401613814565b5001601401516001600160a01b031690565b6000610ceb838361383b565b7f18e4b1410000000000000000000000000000000000000000000000000000000090565b60008183106132a95781610ceb565b5090919050565b7f4678472b0000000000000000000000000000000000000000000000000000000090565b7fb6555d6f0000000000000000000000000000000000000000000000000000000090565b7f488219a60000000000000000000000000000000000000000000000000000000090565b7f1b8388f70000000000000000000000000000000000000000000000000000000090565b7fe94a7ed00000000000000000000000000000000000000000000000000000000090565b7f4ad312750000000000000000000000000000000000000000000000000000000090565b6060818311156133a1576133a16131d960008585613814565b83518211156133ba576133ba6131d96001848751613814565b8282036040519080825280601f01601f1916602001820160405280156133e7576020820181803883390190505b509050610ceb6133f682613865565b8461340087613865565b01835161386b565b606080606061342460048551866133889092919063ffffffff16565b80602001905161097d9190810190614718565b60408051600180825281830190925260609182918291816020015b61345a613be4565b8152602001906001900390816134525750506040805160018082528183019092529194506020808301908038833901905050604080516001808252818301909252919350816020015b60608152602001906001900390816134a357505084519091506134d090859060049063ffffffff61338816565b8060200190516134e39190810190614bec565b856000815181106134f057fe5b602002602001018560008151811061350457fe5b602002602001018560008151811061351857fe5b6020908102919091010192909252919052529193909250565b60408051600180825281830190925260609182918291602080830190803883395050855191935061356d9186915060049063ffffffff61338816565b8060200190516135809190810190614792565b8451859060009061358d57fe5b60209081029190910101919091529095929450925050565b7f11c7b7200000000000000000000000000000000000000000000000000000000090565b8351602094850120835193850193909320604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f815295860194909452928401929092526060830152608082015260a0902090565b6000610ceb8261362f85613910565b61398b565b7fa15c0d060000000000000000000000000000000000000000000000000000000090565b7f7e5a23180000000000000000000000000000000000000000000000000000000090565b6000610ceb8261362f856139c5565b7f5bd0428d0000000000000000000000000000000000000000000000000000000090565b7f20d11f610000000000000000000000000000000000000000000000000000000090565b7ff59851840000000000000000000000000000000000000000000000000000000090565b6136ff613c77565b6020810184905260a0850151608086015161371b918691613a7e565b815260a085015160c0860151613732918691613a7e565b604082015260a085015160e086015161374c918691613a7e565b6060820152613761828463ffffffff613ab216565b6080820152949350505050565b600081518351148015610ceb5750508051602091820120825192909101919091201490565b600082820183811015610ceb57610ceb6131d960008686613adf565b600061169a836137c5868563ffffffff613ab216565b9063ffffffff613afe16565b6000828211156137ea576137ea6131d960028585613adf565b50900390565b7fe53c76c80000000000000000000000000000000000000000000000000000000090565b6060632800659560e01b848484604051602401610cb69392919061562f565b805160208201fd5b6000816020018351101561385c5761385c6131d96005855185602001613814565b50016020015190565b60200190565b6020811015613895576001816020036101000a0380198351168185511680821786525050506131bb565b828214156138a2576131bb565b828211156138dc5760208103905080820181840181515b828510156138d45784518652602095860195909401936138b9565b9052506131bb565b60208103905080820181840183515b818612156139075782518252601f1992830192909101906138eb565b85525050505050565b608081810151825160208085015160408087015160609788015186519685019690962082517fec69816980a3a3ca4554410e60253953e9ff375ba4536a98adfa15cc7154150881529485019590955290830191909152948101949094526001600160a01b039091169183019190915260a082015260c0902090565b6040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6101408101516101608201516101808301516101a08401516000937ff80322eb8376aafb64eadf8f0d7623f22130fd9491a221e902b713cb984a753493909290916020871015613a1157fe5b601f1987018051610140890180516101608b0180516101808d0180516101a08f0180519d89528c5160209d8e012087528b519b8d019b909b2084528951998c01999099208152875197909a019690962088526101e085209390945290529190529252919091529050919050565b6000613a8b848484613b28565b15613a9e57613a9e6131d9858585613b8e565b61169a836137c5868563ffffffff613ab216565b600082613ac15750600061093d565b82820282848281613ace57fe5b0414610ceb57610ceb6131d9600186865b606063e946c1bb60e01b848484604051602401610cb6939291906155c0565b600081613b1457613b146131d960038585613adf565b6000828481613b1f57fe5b04949350505050565b600082613b3a57613b3a6131d9613bad565b811580613b45575083155b15613b5257506000610ceb565b60008380613b5c57fe5b8584099050613b71858463ffffffff613ab216565b613b83826103e863ffffffff613ab216565b101595945050505050565b606063339f3de260e01b848484604051602401610cb693929190615892565b60408051808201909152600481527fa791837c00000000000000000000000000000000000000000000000000000000602082015290565b604051806101c0016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001606081525090565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b803561093d81615979565b805161093d81615979565b600082601f830112613cec578081fd5b8135613cff613cfa826158cf565b6158a8565b818152915060208083019084810181840286018201871015613d2057600080fd5b60005b84811015611cb5578135613d3681615979565b84529282019290820190600101613d23565b600082601f830112613d58578081fd5b8151613d66613cfa826158cf565b8181529150602080830190840160005b83811015613da357613d8e8760208451890101613fc8565b83526020928301929190910190600101613d76565b5050505092915050565b600082601f830112613dbd578081fd5b8135613dcb613cfa826158cf565b8181529150602080830190840160005b83811015613da357613df38760208435890101613f7a565b83526020928301929190910190600101613ddb565b600082601f830112613e18578081fd5b8151613e26613cfa826158cf565b8181529150602080830190840160005b83811015613da357613e4e876020845189010161415d565b83526020928301929190910190600101613e36565b600082601f830112613e73578081fd5b8135613e81613cfa826158cf565b8181529150602080830190840160005b83811015613da357613ea9876020843589010161400e565b83526020928301929190910190600101613e91565b600082601f830112613ece578081fd5b8151613edc613cfa826158cf565b818152915060208083019084810181840286018201871015613efd57600080fd5b60005b84811015611cb557815184529282019290820190600101613f00565b600082601f830112613f2c578081fd5b8135613f3a613cfa826158cf565b818152915060208083019084810181840286018201871015613f5b57600080fd5b60005b84811015611cb557813584529282019290820190600101613f5e565b600082601f830112613f8a578081fd5b8135613f98613cfa826158ef565b9150808252836020828501011115613faf57600080fd5b8060208401602084013760009082016020015292915050565b600082601f830112613fd8578081fd5b8151613fe6613cfa826158ef565b9150808252836020828501011115613ffd57600080fd5b611cba81602084016020860161591e565b60006101c0808385031215614021578182fd5b61402a816158a8565b9150506140378383613cc6565b81526140468360208401613cc6565b60208201526140588360408401613cc6565b604082015261406a8360608401613cc6565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e08201526101008083013581830152506101208083013581830152506101408083013567ffffffffffffffff808211156140cc57600080fd5b6140d886838701613f7a565b838501526101609250828501359150808211156140f457600080fd5b61410086838701613f7a565b8385015261018092508285013591508082111561411c57600080fd5b61412886838701613f7a565b838501526101a092508285013591508082111561414457600080fd5b5061415185828601613f7a565b82840152505092915050565b60006101c0808385031215614170578182fd5b614179816158a8565b9150506141868383613cd1565b81526141958360208401613cd1565b60208201526141a78360408401613cd1565b60408201526141b98360608401613cd1565b60608201526080820151608082015260a082015160a082015260c082015160c082015260e082015160e08201526101008083015181830152506101208083015181830152506101408083015167ffffffffffffffff8082111561421b57600080fd5b61422786838701613fc8565b8385015261016092508285015191508082111561424357600080fd5b61424f86838701613fc8565b8385015261018092508285015191508082111561426b57600080fd5b61427786838701613fc8565b838501526101a092508285015191508082111561429357600080fd5b5061415185828601613fc8565b805160ff8116811461093d57600080fd5b6000602082840312156142c2578081fd5b8135610ceb81615979565b600080604083850312156142df578081fd5b82516142ea81615979565b60208401519092506142fb81615979565b809150509250929050565b60008060006060848603121561431a578081fd5b835161432581615979565b602085015190935061433681615979565b80925050604084015190509250925092565b60008060006060848603121561435c578081fd5b835161436781615979565b602085015190935067ffffffffffffffff811115614383578182fd5b61438f86828701613fc8565b925050604084015190509250925092565b600080600080608085870312156143b5578182fd5b84516143c081615979565b602086015190945067ffffffffffffffff808211156143dd578384fd5b6143e988838901613fc8565b945060408701519150808211156143fe578384fd5b61440a88838901613fc8565b9350606087015191508082111561441f578283fd5b5061442c87828801613fc8565b91505092959194509250565b6000806040838503121561444a578182fd5b823561445581615979565b9150602083013567ffffffffffffffff811115614470578182fd5b61447c85828601613dad565b9150509250929050565b6000806000806080858703121561449b578182fd5b84356144a681615979565b9350602085013567ffffffffffffffff808211156144c2578384fd5b6144ce88838901613f1c565b945060408701359150808211156144e3578384fd5b6144ef88838901613f1c565b93506060870135915080821115614504578283fd5b5061442c87828801613f7a565b60008060408385031215614523578182fd5b823561452e81615979565b9150602083013567ffffffffffffffff811115614549578182fd5b61447c85828601613f7a565b600080600060608486031215614569578081fd5b833561457481615979565b9250602084013567ffffffffffffffff81111561458f578182fd5b61459b86828701613f7a565b925050604084013590509250925092565b600080604083850312156145be578182fd5b82356145c981615979565b946020939093013593505050565b6000602082840312156145e8578081fd5b813567ffffffffffffffff8111156145fe578182fd5b61169a84828501613cdc565b60006020828403121561461b578081fd5b815167ffffffffffffffff811115614631578182fd5b61169a84828501613e08565b600080600060608486031215614651578081fd5b833567ffffffffffffffff80821115614668578283fd5b61467487838801613e63565b94506020860135915080821115614689578283fd5b61469587838801613cdc565b935060408601359150808211156146aa578283fd5b506146b786828701613f1c565b9150509250925092565b600080604083850312156146d3578182fd5b823567ffffffffffffffff808211156146ea578384fd5b6146f686838701613e63565b9350602085013591508082111561470b578283fd5b5061447c85828601613dad565b60008060006060848603121561472c578081fd5b835167ffffffffffffffff80821115614743578283fd5b61474f87838801613e08565b94506020860151915080821115614764578283fd5b61477087838801613ebe565b93506040860151915080821115614785578283fd5b506146b786828701613d48565b6000806000606084860312156147a6578081fd5b835167ffffffffffffffff808211156147bd578283fd5b6147c987838801613e08565b9450602086015193506040860151915080821115614785578283fd5b600080604083850312156147f7578182fd5b823567ffffffffffffffff8082111561480e578384fd5b6146f686838701613f1c565b6000806040838503121561482c578182fd5b825167ffffffffffffffff80821115614843578384fd5b61484f86838701613ebe565b93506020850151915080821115614864578283fd5b5061447c85828601613d48565b600060208284031215614882578081fd5b81518015158114610ceb578182fd5b600080600080608085870312156148a6578182fd5b8451935060208501516148b881615979565b604086015190935067ffffffffffffffff808211156143fe578384fd5b600080604083850312156148e7578182fd5b505080516020909101519092909150565b6000806040838503121561490a578182fd5b82519150602083015167ffffffffffffffff811115614927578182fd5b61447c85828601613fc8565b600080600060608486031215614947578081fd5b83519250602084015167ffffffffffffffff80821115614965578283fd5b61497187838801613fc8565b93506040860151915080821115614986578283fd5b506146b786828701613fc8565b600080604083850312156149a5578182fd5b8251915060208301516142fb8161598e565b600080604083850312156149c9578182fd5b82516001600160e01b0319811681146142ea578283fd5b6000602082840312156149f1578081fd5b813567ffffffffffffffff811115614a07578182fd5b61169a84828501613f7a565b600060608284031215614a24578081fd5b614a2e60606158a8565b614a3884846142a0565b815260208301516020820152604083015160408201528091505092915050565b600060208284031215614a69578081fd5b815167ffffffffffffffff811115614a7f578182fd5b61169a8482850161415d565b600080600060608486031215614a9f578081fd5b833567ffffffffffffffff811115614ab5578182fd5b614ac18682870161400e565b9350506020840135614ad281615979565b929592945050506040919091013590565b60008060408385031215614af5578182fd5b823567ffffffffffffffff80821115614b0c578384fd5b614b188683870161400e565b93506020850135915080821115614b2d578283fd5b5061447c85828601613f7a565b600080600060608486031215614b4e578081fd5b833567ffffffffffffffff811115614b64578182fd5b614b708682870161400e565b935050602084013591506040840135614b8881615979565b809150509250925092565b60008060008060808587031215614ba8578182fd5b845167ffffffffffffffff80821115614bbf578384fd5b614bcb8883890161415d565b95506020870151915080821115614be0578384fd5b6143e98883890161415d565b600080600060608486031215614c00578081fd5b835167ffffffffffffffff80821115614c17578283fd5b614c238783880161415d565b9450602086015193506040860151915080821115614986578283fd5b600080600060608486031215614c53578081fd5b833567ffffffffffffffff80821115614c6a578283fd5b81860160a08189031215614c7c578384fd5b614c8660a06158a8565b92508035835260208101356020840152604081013560408401526060810135614cae81615979565b6060840152608081013582811115614cc4578485fd5b614cd089828401613f7a565b608085015250919450505060208401359150614cef8560408601613cc6565b90509250925092565b600060208284031215614d09578081fd5b5051919050565b60008060408385031215614d22578182fd5b8251614d2d8161598e565b6020939093015192949293505050565b600080600060608486031215614d51578081fd5b8351614d5c8161598e565b602085015160408601519194509250614b8881615979565b60008060008060808587031215614d89578182fd5b614d9386866142a0565b9350602085015192506040850151614daa81615979565b606086015190925067ffffffffffffffff811115614dc6578182fd5b61442c87828801613fc8565b600080600060608486031215614de6578081fd5b614df085856142a0565b925060208401519150604084015167ffffffffffffffff811115614e12578182fd5b6146b786828701613fc8565b600080600060608486031215614e32578081fd5b614e3c85856142a0565b925060208401519150604084015190509250925092565b6001600160a01b03169052565b6000815180845260208401935060208301825b82811015614e9a5781516001600160a01b0316865260209586019590910190600101614e73565b5093949350505050565b600081518084526020840180819550602083028101915060208501845b84811015614eef578284038852614ed9848351614f2c565b6020988901989094509190910190600101614ec1565b50919695505050505050565b6000815180845260208401935060208301825b82811015614e9a578151865260209586019590910190600101614f0e565b60008151808452614f4481602086016020860161591e565b601f01601f19169290920160200192915050565b805160ff16825260208082015190830152604090810151910152565b60006101c0614f84848451614e53565b6020830151614f966020860182614e53565b506040830151614fa96040860182614e53565b506060830151614fbc6060860182614e53565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e085015261010080840151818601525061012080840151818601525061014080840151828287015261501583870182614f2c565b915050610160915081840151858203838701526150328282614f2c565b92505050610180808401518583038287015261504e8382614f2c565b9150506101a09150818401518582038387015261506b8282614f2c565b9695505050505050565b6000825161508781846020870161591e565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60006001600160a01b0386168252608060208301526151056080830186614efb565b82810360408401526151178186614efb565b83810360608501526151298186614f2c565b98975050505050505050565b60006001600160a01b0385168252606060208301526151576060830185614f2c565b9050826040830152949350505050565b60006001600160a01b0386168252608060208301526151896080830186614f2c565b82810360408401526151178186614f2c565b6001600160a01b03929092168252602082015260400190565b6000608082526151c76080830187614ea4565b82810360208401526151d98187614e60565b83810360408501526151eb8187614e60565b91505082810360608401526152008185614efb565b979650505050505050565b602080825282518282018190526000918401906040840190835b8181101561524b576152378451615913565b835260209384019390920191600101615225565b509095945050505050565b606080825284519082018190526000906020906080840190828801845b8281101561529957615286848351614f58565b6060939093019290840190600101615273565b505050838103828501526152ad8187614efb565b84810360408601528551808252908301915082860190845b818110156152e35782511515845292840192918401916001016152c5565b509198975050505050505050565b600060208252610ceb6020830184614efb565b6000604082526153176040830185614efb565b82810360208401526153298185614ea4565b95945050505050565b6000604082526153456040830185614efb565b82810360208401526153298185614efb565b90815260200190565b60008582526001600160a01b0385166020830152608060408301526153886080830185614f2c565b82810360608401526152008185614f2c565b918252602082015260400190565b60008382526040602083015261169a6040830184614f2c565b6000848252606060208301526153da6060830185614f2c565b828103604084015261506b8185614f2c565b828152604081016153fc8361596f565b8260208301529392505050565b6001600160e01b031991909116815260200190565b6001600160e01b03199290921682526001600160a01b0316602082015260400190565b60006001600160e01b0319871682526001600160a01b038616602083015260a0604083015261547360a0830186614efb565b82810360608401526154858186614efb565b83810360808501526154978186614f2c565b9998505050505050505050565b60006001600160e01b0319861682526001600160a01b0385166020830152608060408301526154d66080830185614f2c565b905082606083015295945050505050565b6001600160e01b03199390931683526001600160a01b03919091166020830152604082015260600190565b60006001600160e01b031985168252606060208301526155356060830185614efb565b828103604084015261506b8185614ea4565b600060208252610ceb6020830184614f2c565b60006080825261556d6080830187614f2c565b6001600160a01b03958616602084015293909416604082015260ff9190911660609091015292915050565b60006155a38561594e565b848252836020830152606060408301526153296060830184614f2c565b606081016155cd8561595b565b938152602081019290925260409091015290565b606081016155ee85615965565b93815260208101929092526001600160a01b031660409091015290565b604081016156188461595b565b9281526020015290565b606081016155cd85615965565b60608101600885106155cd57fe5b6020810161564a83615913565b825292915050565b600061565d8661596f565b8582528460208301526001600160a01b03841660408301526080606083015261506b6080830184614f2c565b604081016156188461594e565b6000608082526156a96080830187614f2c565b602083820381850152818751808452828401915082838202850101838a01865b838110156156f757601f198784030185526156e5838351614f74565b948601949250908501906001016156c9565b5050868103604088015261570b818a614efb565b94505050505082810360608401526152008185614ea4565b60208082526013908201527f554e4b4e4f574e5f52455455524e5f4441544100000000000000000000000000604082015260600190565b60208082526019908201527f554e4b4e4f574e5f46554e4354494f4e5f53454c4543544f5200000000000000604082015260600190565b6020808252600d908201527f554e494d504c454d454e54454400000000000000000000000000000000000000604082015260600190565b6020808252600c908201527f4241445f53454c4543544f520000000000000000000000000000000000000000604082015260600190565b6020808252600e908201527f57524f4e475f50524f58595f4944000000000000000000000000000000000000604082015260600190565b60a081016158448286614f58565b8360608301528215156080830152949350505050565b600060208252610ceb6020830184614f74565b6000604082526158806040830185614f74565b82810360208401526153298185614f2c565b9283526020830191909152604082015260600190565b60405181810167ffffffffffffffff811182821017156158c757600080fd5b604052919050565b600067ffffffffffffffff8211156158e5578081fd5b5060209081020190565b600067ffffffffffffffff821115615905578081fd5b50601f01601f191660200190565b8060058110610c9057fe5b60005b83811015615939578181015183820152602001615921565b83811115615948576000848401525b50505050565b6002811061595857fe5b50565b6004811061595857fe5b6003811061595857fe5b6007811061595857fe5b6001600160a01b038116811461595857600080fd5b60ff8116811461595857600080fdfea365627a7a72315820a90c93bc636cf863e6e16fc0c4b6869195e557e923eae128ff96ab4e690fc54f6c6578706572696d656e74616cf564736f6c634300050d0040" }, "deployedBytecode": { - "object": "0x608060405234801561001057600080fd5b50600436106102c85760003560e01c80639a7e75261161017b578063cafd3a07116100d8578063d46950281161008c578063e4e6e7da11610071578063e4e6e7da14610711578063e77286eb14610732578063ee4f5a9414610754576102c8565b8063d4695028146106cf578063e25cabf7146106ef576102c8565b8063d186037f116100bd578063d186037f14610689578063d36379051461069c578063d3d862d1146106bc576102c8565b8063cafd3a0714610655578063d001c5dc14610676576102c8565b8063acaedc741161012f578063bbb2dcf611610114578063bbb2dcf6146105ef578063bc03f96414610611578063ca49f47c14610632576102c8565b8063acaedc74146105b9578063b43cffe1146105dc576102c8565b8063a0901e5111610160578063a0901e5114610573578063a5cd62ba14610586578063a6627e9f146105a6576102c8565b80639a7e75261461052c5780639eadc8351461054f576102c8565b806346eb65cb116102295780636f83188e116101dd5780637b66ad34116101c25780637b66ad34146104e55780637d727512146105065780638f4ce47914610519576102c8565b80636f83188e146104a15780637914b2ec146104c4576102c8565b8063590aa8751161020e578063590aa8751461044c57806363eb39921461046c578063651290421461047f576102c8565b806346eb65cb146104175780634dfdac201461042c576102c8565b8063314853ff1161028057806332aae3ad1161026557806332aae3ad146103b15780633db6dc61146103d3578063459be5e2146103f6576102c8565b8063314853ff1461037c578063327d30541461039e576102c8565b80630d7b7d76116102b15780630d7b7d7614610319578063165979e11461033a5780632322cf761461035c576102c8565b806302d0aec3146102cd57806304a5618a146102f7575b600080fd5b6102e06102db366004614f2d565b610776565b6040516102ee929190615836565b60405180910390f35b61030a610305366004614f2d565b6107d2565b6040516102ee93929190615931565b61032c610327366004614a5e565b610880565b6040516102ee9291906157e4565b61034d610348366004614f2d565b6108a2565b6040516102ee93929190615a6e565b61036f61036a366004614a5e565b6108ff565b6040516102ee9190615cdc565b61038f61038a366004614f2d565b610927565b6040516102ee9392919061580b565b61032c6103ac366004614f2d565b61096e565b6103c46103bf366004614f2d565b6109b0565b6040516102ee939291906159e2565b6103e66103e1366004614f2d565b610a03565b6040516102ee94939291906157aa565b610409610404366004614f2d565b610a4d565b6040516102ee929190615a56565b61042a610425366004614f2d565b610aa3565b005b61043f61043a366004614985565b610c36565b6040516102ee9190615744565b61045f61045a3660046147fe565b610cb9565b6040516102ee9190615991565b61045f61047a366004614aa2565b610d3d565b61049261048d366004614f2d565b610dc8565b6040516102ee93929190615511565b6104b46104af366004614f2d565b610e02565b6040516102ee9493929190615ae0565b6104d76104d2366004614f2d565b611943565b6040516102ee929190615868565b6104f86104f3366004614f2d565b61197b565b6040516102ee9291906154f7565b61036f610514366004614a5e565b6119b3565b6104d7610527366004614f2d565b6120c8565b61053f61053a366004614f2d565b612158565b6040516102ee9493929190615a9c565b61056261055d366004614f2d565b6121b9565b6040516102ee95949392919061588b565b61043f610581366004614b24565b612264565b610599610594366004614b8a565b6122dd565b6040516102ee919061565d565b61045f6105b4366004614af9565b6123a0565b6105cc6105c7366004614f2d565b612427565b6040516102ee94939291906155b9565b61045f6105ea3660046149d3565b612463565b6106026105fd366004614f2d565b6124f0565b6040516102ee9392919061595c565b61062461061f366004614f2d565b61259d565b6040516102ee9291906157f2565b610645610640366004614f2d565b6125d6565b6040516102ee94939291906158ee565b610668610663366004614f2d565b612687565b6040516102ee929190615ad3565b61043f610684366004614985565b6126d5565b61036f610697366004614a5e565b612743565b6106af6106aa366004614fe4565b612d86565b6040516102ee9190615a89565b61045f6106ca366004614d32565b613323565b6106e26106dd366004614f2d565b61335b565b6040516102ee9190615853565b6107026106fd366004614c0e565b6134a7565b6040516102ee939291906156a9565b61072461071f366004614985565b6135df565b6040516102ee929190615785565b61074561074036600461503c565b6135f8565b6040516102ee93929190615c80565b610767610762366004614f2d565b613832565b6040516102ee93929190615a2c565b60008061078a8361078561386f565b613893565b60006107a360048551866138ed9092919063ffffffff16565b8060200190516107b69190810190614ee0565b909350905060ff811660068111156107ca57fe5b915050915091565b600080806107e6848263ffffffff61393016565b92506001600160e01b031983167f025717920000000000000000000000000000000000000000000000000000000014610854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615c49565b60405180910390fd5b61086584601063ffffffff61396416565b915061087884602463ffffffff61399716565b929491935050565b60008061088d84846119b3565b91506108998484612743565b90509250929050565b60008060006108b3846107856139a3565b60006108cc60048651876138ed9092919063ffffffff16565b8060200190516108df9190810190615270565b9094509250905060ff811660028111156108f557fe5b9350509193909250565b600080600061090e8585610880565b9150915061091c82826139c7565b925050505b92915050565b6000606080610938846107856139dd565b835161094e90859060049063ffffffff6138ed16565b8060200190516109619190810190614e80565b9196909550909350915050565b60008061097d83610785613a01565b825161099390849060049063ffffffff6138ed16565b8060200190516109a69190810190614e22565b9094909350915050565b60008060606109c184610785613a25565b60006109da60048651876138ed9092919063ffffffff16565b8060200190516109ed9190810190615224565b9094509250905060ff811660018111156108f557fe5b600080606080610a1585610785613a49565b8451610a2b90869060049063ffffffff6138ed16565b806020019051610a3e9190810190614dde565b92989197509550909350915050565b600080610a5c83610785613a6d565b6000610a7560048551866138ed9092919063ffffffff16565b806020019051610a889190810190615157565b9250905060ff81166003811115610a9b57fe5b925050915091565b6000610ab5828263ffffffff61393016565b90506001600160e01b031981167ff47261b0000000000000000000000000000000000000000000000000000000001415610af957610af2826120c8565b5050610c32565b6001600160e01b031981167f02571792000000000000000000000000000000000000000000000000000000001415610b3c57610b34826107d2565b505050610c32565b6001600160e01b031981167fa7cb5fb7000000000000000000000000000000000000000000000000000000001415610b8157610b77826121b9565b5050505050610c32565b6001600160e01b031981167f94cfcdd7000000000000000000000000000000000000000000000000000000001415610bbc57610b34826124f0565b6001600160e01b031981167fc339d10a000000000000000000000000000000000000000000000000000000001415610c0057610bf7826125d6565b50505050610c32565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615c49565b5050565b606060008251905080604051908082528060200260200182016040528015610c68578160200160208202803883390190505b50915060005b818114610cb157610c9285858381518110610c8557fe5b6020026020010151612743565b838281518110610c9e57fe5b6020908102919091010152600101610c6e565b505092915050565b6040516060907ff47261b00000000000000000000000000000000000000000000000000000000090610cef9084906024016154e3565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b0319909316929092179091529050919050565b6040516060907fc339d10a0000000000000000000000000000000000000000000000000000000090610d7790869086908690602401615587565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b03199093169290921790915290505b9392505050565b6000806000610dd984610785613a91565b8351610def90859060049063ffffffff6138ed16565b8060200190516109619190810190614853565b60608080806000610e19868263ffffffff61393016565b90506001600160e01b031981167fdedfc1f1000000000000000000000000000000000000000000000000000000001415610e8a576040518060400160405280601181526020017f626174636843616e63656c4f72646572730000000000000000000000000000008152509450611419565b6001600160e01b031981167f9694a402000000000000000000000000000000000000000000000000000000001415610ef9576040518060400160405280600f81526020017f626174636846696c6c4f726465727300000000000000000000000000000000008152509450611419565b6001600160e01b031981167f8ea8dfe4000000000000000000000000000000000000000000000000000000001415610f68576040518060400160405280601681526020017f626174636846696c6c4f72646572734e6f5468726f77000000000000000000008152509450611419565b6001600160e01b031981167fbeee2e14000000000000000000000000000000000000000000000000000000001415610fd7576040518060400160405280601581526020017f626174636846696c6c4f724b696c6c4f726465727300000000000000000000008152509450611419565b6001600160e01b031981167f2da62987000000000000000000000000000000000000000000000000000000001415611046576040518060400160405280600b81526020017f63616e63656c4f726465720000000000000000000000000000000000000000008152509450611419565b6001600160e01b031981167f9b44d5560000000000000000000000000000000000000000000000000000000014156110b5576040518060400160405280600981526020017f66696c6c4f7264657200000000000000000000000000000000000000000000008152509450611419565b6001600160e01b031981167fe14b58c4000000000000000000000000000000000000000000000000000000001415611124576040518060400160405280600f81526020017f66696c6c4f724b696c6c4f7264657200000000000000000000000000000000008152509450611419565b6001600160e01b031981167f78d29ac1000000000000000000000000000000000000000000000000000000001415611193576040518060400160405280601681526020017f6d61726b65744275794f72646572734e6f5468726f77000000000000000000008152509450611419565b6001600160e01b031981167f369da099000000000000000000000000000000000000000000000000000000001415611202576040518060400160405280601781526020017f6d61726b657453656c6c4f72646572734e6f5468726f770000000000000000008152509450611419565b6001600160e01b031981167f8bc8efb3000000000000000000000000000000000000000000000000000000001415611271576040518060400160405280601981526020017f6d61726b65744275794f726465727346696c6c4f724b696c6c000000000000008152509450611419565b6001600160e01b031981167fa6c3bf330000000000000000000000000000000000000000000000000000000014156112e0576040518060400160405280601a81526020017f6d61726b657453656c6c4f726465727346696c6c4f724b696c6c0000000000008152509450611419565b6001600160e01b031981167f88ec79fb00000000000000000000000000000000000000000000000000000000141561134f576040518060400160405280600b81526020017f6d617463684f72646572730000000000000000000000000000000000000000008152509450611419565b6001600160e01b031981167f4f9559b10000000000000000000000000000000000000000000000000000000014806113b057506001600160e01b031981167f2280c91000000000000000000000000000000000000000000000000000000000145b156113e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615bdb565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615ba4565b6001600160e01b031981167fdedfc1f10000000000000000000000000000000000000000000000000000000014156114be57855161146190879060049063ffffffff613ab516565b8060200190516114749190810190614b57565b604080516000808252602082019092529195505b50604080516000808252602082019092529194506114b6565b60608152602001906001900390816114a15790505b50915061193b565b6001600160e01b031981167fbeee2e1400000000000000000000000000000000000000000000000000000000148061151f57506001600160e01b031981167f9694a40200000000000000000000000000000000000000000000000000000000145b8061155357506001600160e01b031981167f8ea8dfe400000000000000000000000000000000000000000000000000000000145b1561156d5761156186613b35565b9195509350915061193b565b6001600160e01b031981167f2da629870000000000000000000000000000000000000000000000000000000014156116555760408051600180825281830190925290816020015b6115bc614131565b8152602001906001900390816115b457505086519094506115e790879060049063ffffffff613ab516565b8060200190516115fa9190810190614fb1565b8460008151811061160757fe5b602002602001018190525060006040519080825280602002602001820160405280156114885781602001602082028038833901905050604080516000808252602082019092529194506114b6565b6001600160e01b031981167fe14b58c40000000000000000000000000000000000000000000000000000000014806116b657506001600160e01b031981167f9b44d55600000000000000000000000000000000000000000000000000000000145b156116c45761156186613b64565b6001600160e01b031981167f78d29ac100000000000000000000000000000000000000000000000000000000148061172557506001600160e01b031981167f369da09900000000000000000000000000000000000000000000000000000000145b8061175957506001600160e01b031981167f8bc8efb300000000000000000000000000000000000000000000000000000000145b8061178d57506001600160e01b031981167fa6c3bf3300000000000000000000000000000000000000000000000000000000145b1561179b5761156186613c5e565b6001600160e01b031981167f88ec79fb00000000000000000000000000000000000000000000000000000000141561193b576117d5614131565b6117dd614131565b6060806117f760048b518c613ab59092919063ffffffff16565b80602001905161180a9190810190615093565b604080516002808252606082019092529498509296509094509250816020015b611832614131565b81526020019060019003908161182a579050509750838860008151811061185557fe5b6020026020010181905250828860018151811061186e57fe5b602090810291909101015260408051600280825260608201909252908160200160208202803883390190505096508360a00151876000815181106118ae57fe5b6020026020010181815250508260a00151876001815181106118cc57fe5b60209081029190910101526040805160028082526060820190925290816020015b60608152602001906001900390816118ed579050509550818660008151811061191257fe5b6020026020010181905250808660018151811061192b57fe5b6020026020010181905250505050505b509193509193565b60008061195283610785613cd2565b825161196890849060049063ffffffff6138ed16565b8060200190516109a69190810190614f04565b60008061198a83610785613cf6565b82516119a090849060049063ffffffff6138ed16565b8060200190516109a6919081019061481a565b6000806119c6838263ffffffff61393016565b90506001600160e01b031981167ff47261b0000000000000000000000000000000000000000000000000000000001415611b3b576000611a0d84601063ffffffff61396416565b6040519091506060907f70a082310000000000000000000000000000000000000000000000000000000090611a469088906024016154e3565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060006060836001600160a01b031683604051611ac191906154c7565b600060405180830381855afa9150503d8060008114611afc576040519150601f19603f3d011682016040523d82523d6000602084013e611b01565b606091505b5091509150818015611b14575080516020145b611b1f576000611b30565b611b3081600063ffffffff61399716565b9550505050506120c1565b6001600160e01b031981167f02571792000000000000000000000000000000000000000000000000000000001415611cd657600080611b79856107d2565b6040519194509250606091507f6352211e0000000000000000000000000000000000000000000000000000000090611bb5908490602401615cdc565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060006060846001600160a01b031683604051611c3091906154c7565b600060405180830381855afa9150503d8060008114611c6b576040519150601f19603f3d011682016040523d82523d6000602084013e611c70565b606091505b50915091506000828015611c85575081516020145b611c90576000611ca1565b611ca182600c63ffffffff61396416565b9050896001600160a01b0316816001600160a01b031614611cc3576000611cc6565b60015b60ff1697505050505050506120c1565b6001600160e01b031981167fa7cb5fb7000000000000000000000000000000000000000000000000000000001415611eb9576000606080611d16866121b9565b5081519296509094509250905060005b818114611eaf5783516060907efdd58e00000000000000000000000000000000000000000000000000000000908b90879085908110611d6157fe5b6020026020010151604051602401611d7a9291906155ed565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060006060876001600160a01b031683604051611df591906154c7565b600060405180830381855afa9150503d8060008114611e30576040519150601f19603f3d011682016040523d82523d6000602084013e611e35565b606091505b50915091506000828015611e4a575081516020145b611e55576000611e66565b611e6682600063ffffffff61399716565b90506000878681518110611e7657fe5b60200260200101518281611e8657fe5b0490508b811080611e9557508b155b15611e9e57809b505b505060019093019250611d26915050565b50505050506120c1565b6001600160e01b031981167fc339d10a00000000000000000000000000000000000000000000000000000000141561200a576040516060907fa85e59e40000000000000000000000000000000000000000000000000000000090611f28908690600090819081906024016159a4565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b03199094169390931790925260045491519092506000916001600160a01b031690611f8f9084906154c7565b600060405180830381855afa9150503d8060008114611fca576040519150601f19603f3d011682016040523d82523d6000602084013e611fcf565b606091505b5050905080611fdf576000612001565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b935050506120c1565b6001600160e01b031981167f94cfcdd70000000000000000000000000000000000000000000000000000000014156120c157606080612048856124f0565b80519194509250905060005b8181146120bc57600061207a8985848151811061206d57fe5b60200260200101516119b3565b9050600085838151811061208a57fe5b6020026020010151828161209a57fe5b049050878110806120a9575087155b156120b2578097505b5050600101612054565b505050505b5092915050565b6000806120db838263ffffffff61393016565b91506001600160e01b031982167ff47261b00000000000000000000000000000000000000000000000000000000014612140576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615c49565b61215183601063ffffffff61396416565b9050915091565b6000806000606061216b85610785613d1a565b600061218460048751886138ed9092919063ffffffff16565b80602001905161219791908101906151c6565b91965094509250905060ff811660068111156121af57fe5b9450509193509193565b600080606080806121d0868563ffffffff61393016565b94506001600160e01b031985167fa7cb5fb70000000000000000000000000000000000000000000000000000000014612235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615c49565b505050506024828101516044840151606485015160848601519496929591820184019490820184019391010190565b6060808251604051908082528060200260200182016040528015612292578160200160208202803883390190505b50905060005b835181146120c1578381815181106122ac57fe5b60200260200101516001600160a01b0316318282815181106122ca57fe5b6020908102919091010152600101612298565b60606000845190508060405190808252806020026020018201604052801561230f578160200160208202803883390190505b50915060005b8181146123975761236086828151811061232b57fe5b602002602001015186838151811061233f57fe5b602002602001015186848151811061235357fe5b6020026020010151612d86565b83828151811061236c57fe5b6020026020010190600481111561237f57fe5b9081600481111561238c57fe5b905250600101612315565b50509392505050565b6040516060907f0257179200000000000000000000000000000000000000000000000000000000906123d890859085906024016155ed565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b031990931692909217909152905092915050565b6000606080606061243a85610785613d3e565b845161245090869060049063ffffffff6138ed16565b806020019051610a3e91908101906148ed565b6040516060907fa7cb5fb7000000000000000000000000000000000000000000000000000000009061249f908790879087908790602401615535565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b0319909316929092179091529050949350505050565b6000606080612505848463ffffffff61393016565b92506001600160e01b031983167f94cfcdd7000000000000000000000000000000000000000000000000000000001461256a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615c49565b835161258090859060049063ffffffff613ab516565b8060200190516125939190810190614d67565b9395909450915050565b600060606125ad83610785613d62565b82516125c390849060049063ffffffff6138ed16565b8060200190516109a69190810190614e45565b6000806060816125ec858263ffffffff61393016565b93506001600160e01b031984167fc339d10a0000000000000000000000000000000000000000000000000000000014612651576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615c49565b845161266790869060049063ffffffff613ab516565b80602001905161267a9190810190614895565b9597919650949350915050565b60008061269683610785613d86565b60006126af60048551866138ed9092919063ffffffff16565b8060200190516126c29190810190615157565b9250905060ff81166001811115610a9b57fe5b606060008251905080604051908082528060200260200182016040528015612707578160200160208202803883390190505b50915060005b818114610cb1576127248585838151811061206d57fe5b83828151811061273057fe5b602090810291909101015260010161270d565b600080612756838263ffffffff61393016565b90506001600160e01b031981167f94cfcdd700000000000000000000000000000000000000000000000000000000141561280857606080612796856124f0565b80519194509250905060005b8181146127fd5760006127bb89858481518110610c8557fe5b905060008583815181106127cb57fe5b602002602001015182816127db57fe5b049050878110806127ea575087155b156127f3578097505b50506001016127a2565b506109219350505050565b6001600160e01b031981167ff47261b000000000000000000000000000000000000000000000000000000000141561289357600061284d84601063ffffffff61396416565b6001546040519192506060917fdd62ed3e0000000000000000000000000000000000000000000000000000000091611a469189916001600160a01b0316906024016154f7565b6001600160e01b031981167f02571792000000000000000000000000000000000000000000000000000000001415612b83576000806128d1856107d2565b600254604051929550909350606092507fe985e9c5000000000000000000000000000000000000000000000000000000009161291d918a916001600160a01b03909116906024016154f7565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060006060846001600160a01b03168360405161299891906154c7565b600060405180830381855afa9150503d80600081146129d3576040519150601f19603f3d011682016040523d82523d6000602084013e6129d8565b606091505b50915091508115806129ec57508051602014155b80612a085750612a0381600063ffffffff61399716565b600114155b15612b56576040516060907f081812fc0000000000000000000000000000000000000000000000000000000090612a43908790602401615cdc565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050856001600160a01b031681604051612aba91906154c7565b600060405180830381855afa9150503d8060008114612af5576040519150601f19603f3d011682016040523d82523d6000602084013e612afa565b606091505b509093509150828015612b0e575081516020145b8015612b3d57506002546001600160a01b0316612b3283600c63ffffffff61396416565b6001600160a01b0316145b612b48576000612b4b565b60015b60ff16975050611eaf565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff965050505050506120c1565b6001600160e01b031981167fa7cb5fb7000000000000000000000000000000000000000000000000000000001415612d2b576000612bc0846121b9565b5050600354604051929450606093507fe985e9c50000000000000000000000000000000000000000000000000000000092612c0a925089916001600160a01b0316906024016154f7565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060006060836001600160a01b031683604051612c8591906154c7565b600060405180830381855afa9150503d8060008114612cc0576040519150601f19603f3d011682016040523d82523d6000602084013e612cc5565b606091505b5091509150818015612cd8575080516020145b8015612cf45750612cf081600063ffffffff61399716565b6001145b612cff576000611b30565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9550505050506120c1565b6001600160e01b031981167fc339d10a0000000000000000000000000000000000000000000000000000000014156120c157507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9392505050565b6000612d906141c4565b612e218584600560009054906101000a90046001600160a01b03166001600160a01b0316631ce4c78b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612de357600080fd5b505afa158015612df7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612e1b919081019061513f565b3a613daa565b60408051600480825260a0820190925291925060609190816020015b6060815260200190600190039081612e3d57505060408051600480825260a082019092529192506060919060208201608080388339505060408051600480825260a08201909252929350606092915060208201608080388339505060408051600480825260a0820190925292935060609291506020820160808038833901905050905088610160015184600081518110612ed357fe5b60200260200101819052508783600081518110612eec57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050886000015182600081518110612f1e57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508681600081518110612f4c57fe5b60200260200101818152505088610140015184600181518110612f6b57fe5b6020026020010181905250886000015183600181518110612f8857fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508782600181518110612fb657fe5b60200260200101906001600160a01b031690816001600160a01b031681525050846000015181600181518110612fe857fe5b602002602001018181525050886101a001518460028151811061300757fe5b6020026020010181905250878360028151811061302057fe5b60200260200101906001600160a01b031690816001600160a01b03168152505088604001518260028151811061305257fe5b60200260200101906001600160a01b031690816001600160a01b03168152505084606001518160028151811061308457fe5b602002602001018181525050886101800151846003815181106130a357fe5b60200260200101819052508860000151836003815181106130c057fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508860400151826003815181106130f257fe5b60200260200101906001600160a01b031690816001600160a01b03168152505084604001518160038151811061312457fe5b60209081029190910101526040516060907fb04fbddd000000000000000000000000000000000000000000000000000000009061316b908790879087908790602401615606565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b03199094169390931790925260055491519092506060916001600160a01b0316906131d29084906154c7565b6000604051808303816000865af19150503d806000811461320f576040519150601f19603f3d011682016040523d82523d6000602084013e613214565b606091505b5091506000905061322b828263ffffffff61393016565b9050613235613a25565b6001600160e01b031982811691161415613277576000613254836109b0565b5091505060ff8116600481111561326757fe5b9950505050505050505050610dc1565b61327f6139dd565b6001600160e01b0319828116911614156132b257600061329e83610927565b509091505060ff8116600481111561326757fe5b815160208301207ff43f26ea5a94b478394a975e856464913dc1a8a1ca70939d974aa7c238aa0ce014156132f157600498505050505050505050610dc1565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615b6d565b6040516060907f94cfcdd700000000000000000000000000000000000000000000000000000000906123d89085908590602401615757565b600061336d828263ffffffff61393016565b90506001600160e01b031981167ff47261b00000000000000000000000000000000000000000000000000000000014806133d057506001600160e01b031981167f0257179200000000000000000000000000000000000000000000000000000000145b8061340457506001600160e01b031981167fa7cb5fb700000000000000000000000000000000000000000000000000000000145b8061343857506001600160e01b031981167f94cfcdd700000000000000000000000000000000000000000000000000000000145b8061346c57506001600160e01b031981167fc339d10a00000000000000000000000000000000000000000000000000000000145b6134a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615c49565b919050565b6060806060600085519050806040519080825280602002602001820160405280156134ec57816020015b6134d96141f3565b8152602001906001900390816134d15790505b50935080604051908082528060200260200182016040528015613519578160200160208202803883390190505b50925080604051908082528060200260200182016040528015613546578160200160208202803883390190505b50915060005b8181146135d65761358387828151811061356257fe5b602002602001015187838151811061357657fe5b60200260200101516135f8565b875188908590811061359157fe5b602002602001018785815181106135a457fe5b602002602001018786815181106135b757fe5b931515602094850291909101909301929092529190525260010161354c565b50509250925092565b6060806135ec84846126d5565b91506108998484610c36565b6136006141f3565b600080546040517f9d3fa4b900000000000000000000000000000000000000000000000000000000815282916001600160a01b031690639d3fa4b99061364a908890600401615ca4565b60606040518083038186803b15801561366257600080fd5b505afa158015613676573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061369a9190810190614f60565b85516000546040517fa12dcc6f00000000000000000000000000000000000000000000000000000000815292955090916001600160a01b039091169063a12dcc6f906136ec9089908990600401615cb7565b60206040518083038186803b15801561370457600080fd5b505afa158015613718573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061373c9190810190614dbe565b9150600061374f828861014001516108ff565b60a088015160c08901516101808a01516101408b01519394509192909160009161377e9163ffffffff613e2116565b156137ab576137a48461379e848d60800151613e4690919063ffffffff16565b85613e62565b9050613804565b816137bf576137a4848b6080015185613e62565b60006137d0868c61018001516108ff565b905060006137e3868d6080015187613e62565b905060006137f2838688613e62565b90506137fe82826139c7565b93505050505b61382461381e896040015185613e8c90919063ffffffff16565b826139c7565b965050505050509250925092565b600080600061384384610785613eab565b600061385c60048651876138ed9092919063ffffffff16565b8060200190516108df9190810190615184565b7ffdb6ca8d0000000000000000000000000000000000000000000000000000000090565b60006138a0836000613930565b90506001600160e01b0319808216908316146138e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90615c12565b505050565b60608183111561390b5761390b61390660008585613ecf565b613eee565b8351821115613924576139246139066001848751613ecf565b50819003910190815290565b60008160040183511015613951576139516139066003855185600401613ecf565b5001602001516001600160e01b03191690565b60008160140183511015613985576139856139066004855185601401613ecf565b5001601401516001600160a01b031690565b6000610dc18383613ef6565b7f18e4b1410000000000000000000000000000000000000000000000000000000090565b60008183106139d65781610dc1565b5090919050565b7f4678472b0000000000000000000000000000000000000000000000000000000090565b7fb6555d6f0000000000000000000000000000000000000000000000000000000090565b7f488219a60000000000000000000000000000000000000000000000000000000090565b7f1b8388f70000000000000000000000000000000000000000000000000000000090565b7fe94a7ed00000000000000000000000000000000000000000000000000000000090565b7f4ad312750000000000000000000000000000000000000000000000000000000090565b606081831115613ace57613ace61390660008585613ecf565b8351821115613ae757613ae76139066001848751613ecf565b8282036040519080825280601f01601f191660200182016040528015613b14576020820181803883390190505b509050610dc1613b2382613f20565b84613b2d87613f20565b018351613f26565b6060806060613b516004855186613ab59092919063ffffffff16565b8060200190516109619190810190614c65565b60408051600180825281830190925260609182918291816020015b613b87614131565b815260200190600190039081613b7f5750506040805160018082528183019092529194506020808301908038833901905050604080516001808252818301909252919350816020015b6060815260200190600190039081613bd05750508451909150613bfd90859060049063ffffffff613ab516565b806020019051613c1091908101906150ec565b85600081518110613c1d57fe5b6020026020010185600081518110613c3157fe5b6020026020010185600081518110613c4557fe5b6020908102919091010192909252919052529193909250565b604080516001808252818301909252606091829182916020808301908038833950508551919350613c9a9186915060049063ffffffff613ab516565b806020019051613cad9190810190614cdf565b84518590600090613cba57fe5b60209081029190910101919091529095929450925050565b7f11c7b7200000000000000000000000000000000000000000000000000000000090565b7fa15c0d060000000000000000000000000000000000000000000000000000000090565b7f7e5a23180000000000000000000000000000000000000000000000000000000090565b7f5bd0428d0000000000000000000000000000000000000000000000000000000090565b7f20d11f610000000000000000000000000000000000000000000000000000000090565b7ff59851840000000000000000000000000000000000000000000000000000000090565b613db26141c4565b6020810184905260a08501516080860151613dce918691613fcb565b815260a085015160c0860151613de5918691613fcb565b604082015260a085015160e0860151613dff918691613fcb565b6060820152613e14828463ffffffff613fff16565b6080820152949350505050565b600081518351148015610dc15750508051602091820120825192909101919091201490565b600082820183811015610dc157610dc16139066000868661402c565b6000613e8483613e78868563ffffffff613fff16565b9063ffffffff61404b16565b949350505050565b600082821115613ea557613ea56139066002858561402c565b50900390565b7fe53c76c80000000000000000000000000000000000000000000000000000000090565b6060632800659560e01b848484604051602401610d7793929190615a7b565b805160208201fd5b60008160200183511015613f1757613f176139066005855185602001613ecf565b50016020015190565b60200190565b6020811015613f50576001816020036101000a0380198351168185511680821786525050506138e8565b82821415613f5d576138e8565b82821115613f975760208103905080820181840181515b82851015613f8f578451865260209586019590940193613f74565b9052506138e8565b60208103905080820181840183515b81861215613fc25782518252601f199283019290910190613fa6565b85525050505050565b6000613fd8848484614075565b15613feb57613feb6139068585856140db565b613e8483613e78868563ffffffff613fff16565b60008261400e57506000610921565b8282028284828161401b57fe5b0414610dc157610dc1613906600186865b606063e946c1bb60e01b848484604051602401610d7793929190615a0a565b600081614061576140616139066003858561402c565b600082848161406c57fe5b04949350505050565b600082614087576140876139066140fa565b811580614092575083155b1561409f57506000610dc1565b600083806140a957fe5b85840990506140be858463ffffffff613fff16565b6140d0826103e863ffffffff613fff16565b101595945050505050565b606063339f3de260e01b848484604051602401610d7793929190615ce5565b60408051808201909152600481527fa791837c00000000000000000000000000000000000000000000000000000000602082015290565b604051806101c0016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001606081525090565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b803561092181615dc1565b805161092181615dc1565b600082601f830112614239578081fd5b813561424c61424782615d22565b615cfb565b81815291506020808301908481018184028601820187101561426d57600080fd5b60005b848110156120bc57813561428381615dc1565b84529282019290820190600101614270565b600082601f8301126142a5578081fd5b81516142b361424782615d22565b8181529150602080830190840160005b838110156142f0576142db8760208451890101614515565b835260209283019291909101906001016142c3565b5050505092915050565b600082601f83011261430a578081fd5b813561431861424782615d22565b8181529150602080830190840160005b838110156142f05761434087602084358901016144c7565b83526020928301929190910190600101614328565b600082601f830112614365578081fd5b815161437361424782615d22565b8181529150602080830190840160005b838110156142f05761439b87602084518901016146aa565b83526020928301929190910190600101614383565b600082601f8301126143c0578081fd5b81356143ce61424782615d22565b8181529150602080830190840160005b838110156142f0576143f6876020843589010161455b565b835260209283019291909101906001016143de565b600082601f83011261441b578081fd5b815161442961424782615d22565b81815291506020808301908481018184028601820187101561444a57600080fd5b60005b848110156120bc5781518452928201929082019060010161444d565b600082601f830112614479578081fd5b813561448761424782615d22565b8181529150602080830190848101818402860182018710156144a857600080fd5b60005b848110156120bc578135845292820192908201906001016144ab565b600082601f8301126144d7578081fd5b81356144e561424782615d42565b91508082528360208285010111156144fc57600080fd5b8060208401602084013760009082016020015292915050565b600082601f830112614525578081fd5b815161453361424782615d42565b915080825283602082850101111561454a57600080fd5b6120c1816020840160208601615d66565b60006101c080838503121561456e578182fd5b61457781615cfb565b9150506145848383614213565b81526145938360208401614213565b60208201526145a58360408401614213565b60408201526145b78360608401614213565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e08201526101008083013581830152506101208083013581830152506101408083013567ffffffffffffffff8082111561461957600080fd5b614625868387016144c7565b8385015261016092508285013591508082111561464157600080fd5b61464d868387016144c7565b8385015261018092508285013591508082111561466957600080fd5b614675868387016144c7565b838501526101a092508285013591508082111561469157600080fd5b5061469e858286016144c7565b82840152505092915050565b60006101c08083850312156146bd578182fd5b6146c681615cfb565b9150506146d3838361421e565b81526146e2836020840161421e565b60208201526146f4836040840161421e565b6040820152614706836060840161421e565b60608201526080820151608082015260a082015160a082015260c082015160c082015260e082015160e08201526101008083015181830152506101208083015181830152506101408083015167ffffffffffffffff8082111561476857600080fd5b61477486838701614515565b8385015261016092508285015191508082111561479057600080fd5b61479c86838701614515565b838501526101809250828501519150808211156147b857600080fd5b6147c486838701614515565b838501526101a09250828501519150808211156147e057600080fd5b5061469e85828601614515565b805160ff8116811461092157600080fd5b60006020828403121561480f578081fd5b8135610dc181615dc1565b6000806040838503121561482c578081fd5b825161483781615dc1565b602084015190925061484881615dc1565b809150509250929050565b600080600060608486031215614867578081fd5b835161487281615dc1565b602085015190935061488381615dc1565b80925050604084015190509250925092565b6000806000606084860312156148a9578081fd5b83516148b481615dc1565b602085015190935067ffffffffffffffff8111156148d0578182fd5b6148dc86828701614515565b925050604084015190509250925092565b60008060008060808587031215614902578182fd5b845161490d81615dc1565b602086015190945067ffffffffffffffff8082111561492a578384fd5b61493688838901614515565b9450604087015191508082111561494b578384fd5b61495788838901614515565b9350606087015191508082111561496c578283fd5b5061497987828801614515565b91505092959194509250565b60008060408385031215614997578182fd5b82356149a281615dc1565b9150602083013567ffffffffffffffff8111156149bd578182fd5b6149c9858286016142fa565b9150509250929050565b600080600080608085870312156149e8578182fd5b84356149f381615dc1565b9350602085013567ffffffffffffffff80821115614a0f578384fd5b614a1b88838901614469565b94506040870135915080821115614a30578384fd5b614a3c88838901614469565b93506060870135915080821115614a51578283fd5b50614979878288016144c7565b60008060408385031215614a70578182fd5b8235614a7b81615dc1565b9150602083013567ffffffffffffffff811115614a96578182fd5b6149c9858286016144c7565b600080600060608486031215614ab6578081fd5b8335614ac181615dc1565b9250602084013567ffffffffffffffff811115614adc578182fd5b614ae8868287016144c7565b925050604084013590509250925092565b60008060408385031215614b0b578182fd5b8235614b1681615dc1565b946020939093013593505050565b600060208284031215614b35578081fd5b813567ffffffffffffffff811115614b4b578182fd5b613e8484828501614229565b600060208284031215614b68578081fd5b815167ffffffffffffffff811115614b7e578182fd5b613e8484828501614355565b600080600060608486031215614b9e578081fd5b833567ffffffffffffffff80821115614bb5578283fd5b614bc1878388016143b0565b94506020860135915080821115614bd6578283fd5b614be287838801614229565b93506040860135915080821115614bf7578283fd5b50614c0486828701614469565b9150509250925092565b60008060408385031215614c20578182fd5b823567ffffffffffffffff80821115614c37578384fd5b614c43868387016143b0565b93506020850135915080821115614c58578283fd5b506149c9858286016142fa565b600080600060608486031215614c79578081fd5b835167ffffffffffffffff80821115614c90578283fd5b614c9c87838801614355565b94506020860151915080821115614cb1578283fd5b614cbd8783880161440b565b93506040860151915080821115614cd2578283fd5b50614c0486828701614295565b600080600060608486031215614cf3578081fd5b835167ffffffffffffffff80821115614d0a578283fd5b614d1687838801614355565b9450602086015193506040860151915080821115614cd2578283fd5b60008060408385031215614d44578182fd5b823567ffffffffffffffff80821115614d5b578384fd5b614c4386838701614469565b60008060408385031215614d79578182fd5b825167ffffffffffffffff80821115614d90578384fd5b614d9c8683870161440b565b93506020850151915080821115614db1578283fd5b506149c985828601614295565b600060208284031215614dcf578081fd5b81518015158114610dc1578182fd5b60008060008060808587031215614df3578182fd5b845193506020850151614e0581615dc1565b604086015190935067ffffffffffffffff8082111561494b578384fd5b60008060408385031215614e34578182fd5b505080516020909101519092909150565b60008060408385031215614e57578182fd5b82519150602083015167ffffffffffffffff811115614e74578182fd5b6149c985828601614515565b600080600060608486031215614e94578081fd5b83519250602084015167ffffffffffffffff80821115614eb2578283fd5b614ebe87838801614515565b93506040860151915080821115614ed3578283fd5b50614c0486828701614515565b60008060408385031215614ef2578182fd5b82519150602083015161484881615dd6565b60008060408385031215614f16578182fd5b82516001600160e01b031981168114614837578283fd5b600060208284031215614f3e578081fd5b813567ffffffffffffffff811115614f54578182fd5b613e84848285016144c7565b60006060828403128015614f72578182fd5b8015614f7c578182fd5b50614f876060615cfb565b614f9184846147ed565b815260208301516020820152604083015160408201528091505092915050565b600060208284031215614fc2578081fd5b815167ffffffffffffffff811115614fd8578182fd5b613e84848285016146aa565b600080600060608486031215614ff8578081fd5b833567ffffffffffffffff81111561500e578182fd5b61501a8682870161455b565b935050602084013561502b81615dc1565b929592945050506040919091013590565b6000806040838503121561504e578182fd5b823567ffffffffffffffff80821115615065578384fd5b6150718683870161455b565b93506020850135915080821115615086578283fd5b506149c9858286016144c7565b600080600080608085870312156150a8578182fd5b845167ffffffffffffffff808211156150bf578384fd5b6150cb888389016146aa565b955060208701519150808211156150e0578384fd5b614936888389016146aa565b600080600060608486031215615100578081fd5b835167ffffffffffffffff80821115615117578283fd5b615123878388016146aa565b9450602086015193506040860151915080821115614ed3578283fd5b600060208284031215615150578081fd5b5051919050565b60008060408385031215615169578182fd5b825161517481615dd6565b6020939093015192949293505050565b600080600060608486031215615198578081fd5b83516151a381615dd6565b6020850151604086015191945092506151bb81615dc1565b809150509250925092565b600080600080608085870312156151db578182fd5b6151e586866147ed565b93506020850151925060408501516151fc81615dc1565b606086015190925067ffffffffffffffff811115615218578182fd5b61497987828801614515565b600080600060608486031215615238578081fd5b61524285856147ed565b925060208401519150604084015167ffffffffffffffff811115615264578182fd5b614c0486828701614515565b600080600060608486031215615284578081fd5b61528e85856147ed565b925060208401519150604084015190509250925092565b6001600160a01b03169052565b6000815180845260208401935060208301825b828110156152ec5781516001600160a01b03168652602095860195909101906001016152c5565b5093949350505050565b600081518084526020840180819550602083028101915060208501845b8481101561534157828403885261532b84835161537e565b6020988901989094509190910190600101615313565b50919695505050505050565b6000815180845260208401935060208301825b828110156152ec578151865260209586019590910190600101615360565b60008151808452615396816020860160208601615d66565b601f01601f19169290920160200192915050565b805160ff16825260208082015190830152604090810151910152565b60006101c06153d68484516152a5565b60208301516153e860208601826152a5565b5060408301516153fb60408601826152a5565b50606083015161540e60608601826152a5565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e08501526101008084015181860152506101208084015181860152506101408084015182828701526154678387018261537e565b91505061016091508184015185820383870152615484828261537e565b9250505061018080840151858303828701526154a0838261537e565b9150506101a0915081840151858203838701526154bd828261537e565b9695505050505050565b600082516154d9818460208701615d66565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60006001600160a01b038616825260806020830152615557608083018661534d565b8281036040840152615569818661534d565b838103606085015261557b818661537e565b98975050505050505050565b60006001600160a01b0385168252606060208301526155a9606083018561537e565b9050826040830152949350505050565b60006001600160a01b0386168252608060208301526155db608083018661537e565b8281036040840152615569818661537e565b6001600160a01b03929092168252602082015260400190565b60006080825261561960808301876152f6565b828103602084015261562b81876152b2565b838103604085015261563d81876152b2565b9150508281036060840152615652818561534d565b979650505050505050565b602080825282518282018190526000918401906040840190835b8181101561569e57835161568a81615db7565b835260209384019390920191600101615677565b509095945050505050565b606080825284519082018190526000906020906080840190828801845b828110156156ec576156d98483516153aa565b60609390930192908401906001016156c6565b50505083810382850152615700818761534d565b84810360408601528551808252908301915082860190845b81811015615736578251151584529284019291840191600101615718565b509198975050505050505050565b600060208252610dc1602083018461534d565b60006040825261576a604083018561534d565b828103602084015261577c81856152f6565b95945050505050565b600060408252615798604083018561534d565b828103602084015261577c818561534d565b60008582526001600160a01b0385166020830152608060408301526157d2608083018561537e565b8281036060840152615652818561537e565b918252602082015260400190565b600083825260406020830152613e84604083018461537e565b600084825260606020830152615824606083018561537e565b82810360408401526154bd818561537e565b8281526040810161584683615dad565b8260208301529392505050565b6001600160e01b031991909116815260200190565b6001600160e01b03199290921682526001600160a01b0316602082015260400190565b60006001600160e01b0319871682526001600160a01b038616602083015260a060408301526158bd60a083018661534d565b82810360608401526158cf818661534d565b83810360808501526158e1818661537e565b9998505050505050505050565b60006001600160e01b0319861682526001600160a01b038516602083015260806040830152615920608083018561537e565b905082606083015295945050505050565b6001600160e01b03199390931683526001600160a01b03919091166020830152604082015260600190565b60006001600160e01b0319851682526060602083015261597f606083018561534d565b82810360408401526154bd81856152f6565b600060208252610dc1602083018461537e565b6000608082526159b7608083018761537e565b6001600160a01b03958616602084015293909416604082015260ff9190911660609091015292915050565b60006159ed85615d96565b8482528360208301526060604083015261577c606083018461537e565b6060810160048510615a1857fe5b938152602081019290925260409091015290565b60608101615a3985615da3565b93815260208101929092526001600160a01b031660409091015290565b6040810160048410615a6457fe5b9281526020015290565b60608101615a1885615da3565b6060810160088510615a1857fe5b60208101615a9683615db7565b91905290565b6000615aa786615dad565b8582528460208301526001600160a01b0384166040830152608060608301526154bd608083018461537e565b60408101615a6484615d96565b600060808252615af3608083018761537e565b602083820381850152818751808452828401915082838202850101838a01865b83811015615b4157601f19878403018552615b2f8383516153c6565b94860194925090850190600101615b13565b50508681036040880152615b55818a61534d565b945050505050828103606084015261565281856152f6565b60208082526013908201527f554e4b4e4f574e5f52455455524e5f4441544100000000000000000000000000604082015260600190565b60208082526019908201527f554e4b4e4f574e5f46554e4354494f4e5f53454c4543544f5200000000000000604082015260600190565b6020808252600d908201527f554e494d504c454d454e54454400000000000000000000000000000000000000604082015260600190565b6020808252600c908201527f4241445f53454c4543544f520000000000000000000000000000000000000000604082015260600190565b6020808252600e908201527f57524f4e475f50524f58595f4944000000000000000000000000000000000000604082015260600190565b60a08101615c8e82866153aa565b8360608301528215156080830152949350505050565b600060208252610dc160208301846153c6565b600060408252615cca60408301856153c6565b828103602084015261577c818561537e565b90815260200190565b9283526020830191909152604082015260600190565b60405181810167ffffffffffffffff81118282101715615d1a57600080fd5b604052919050565b600067ffffffffffffffff821115615d38578081fd5b5060209081020190565b600067ffffffffffffffff821115615d58578081fd5b50601f01601f191660200190565b60005b83811015615d81578181015183820152602001615d69565b83811115615d90576000848401525b50505050565b60028110615da057fe5b50565b60038110615da057fe5b60078110615da057fe5b60058110615da057fe5b6001600160a01b0381168114615da057600080fd5b60ff81168114615da057600080fdfea365627a7a723158209bd08114ba2e3dada6fb089e11dba7dc3bfedf454a0bac82e7a05d67b08360dd6c6578706572696d656e74616cf564736f6c634300050c0040" + "object": "0x608060405234801561001057600080fd5b50600436106102e95760003560e01c80639a7e752611610191578063ca49f47c116100e3578063d3d862d111610097578063e4e6e7da11610071578063e4e6e7da14610760578063e77286eb14610781578063ee4f5a94146107a3576102e9565b8063d3d862d11461070b578063d46950281461071e578063e25cabf71461073e576102e9565b8063d001c5dc116100c8578063d001c5dc146106c5578063d186037f146106d8578063d3637905146106eb576102e9565b8063ca49f47c14610681578063cafd3a07146106a4576102e9565b8063a6627e9f11610145578063bbb2dcf61161011f578063bbb2dcf614610636578063bc03f96414610658578063c26cfecd14610679576102e9565b8063a6627e9f146105ed578063acaedc7414610600578063b43cffe114610623576102e9565b8063a070cac811610176578063a070cac8146105a7578063a0901e51146105ba578063a5cd62ba146105cd576102e9565b80639a7e7526146105605780639eadc83514610583576102e9565b806346eb65cb1161024a5780636f83188e116101fe5780637b66ad34116101d85780637b66ad34146105195780637d7275121461053a5780638f4ce4791461054d576102e9565b80636f83188e146104c25780637914b2ec146104e557806379c9c42614610506576102e9565b8063590aa8751161022f578063590aa8751461046d57806363eb39921461048d57806365129042146104a0576102e9565b806346eb65cb146104385780634dfdac201461044d576102e9565b8063314853ff116102a157806332aae3ad1161028657806332aae3ad146103d25780633db6dc61146103f4578063459be5e214610417576102e9565b8063314853ff1461039d578063327d3054146103bf576102e9565b80630d7b7d76116102d25780630d7b7d761461033a578063165979e11461035b5780632322cf761461037d576102e9565b806302d0aec3146102ee57806304a5618a14610318575b600080fd5b6103016102fc3660046149e0565b6107c5565b60405161030f9291906153ec565b60405180910390f35b61032b6103263660046149e0565b610821565b60405161030f939291906154e7565b61034d610348366004614511565b61089c565b60405161030f92919061539a565b61036e6103693660046149e0565b6108be565b60405161030f93929190615622565b61039061038b366004614511565b61091b565b60405161030f9190615357565b6103b06103ab3660046149e0565b610943565b60405161030f939291906153c1565b61034d6103cd3660046149e0565b61098a565b6103e56103e03660046149e0565b6109cc565b60405161030f93929190615598565b6104076104023660046149e0565b610a1f565b60405161030f9493929190615360565b61042a6104253660046149e0565b610a69565b60405161030f92919061560b565b61044b6104463660046149e0565b610abf565b005b61046061045b366004614438565b610bbb565b60405161030f91906152f1565b61048061047b3660046142b1565b610c3e565b60405161030f9190615547565b61048061049b366004614555565b610c95565b6104b36104ae3660046149e0565b610cf2565b60405161030f939291906150bf565b6104d56104d03660046149e0565b610d2c565b60405161030f9493929190615696565b6104f86104f33660046149e0565b6115e1565b60405161030f92919061541e565b610390610514366004614c3f565b611619565b61052c6105273660046149e0565b6116a2565b60405161030f9291906150a5565b610390610548366004614511565b6116da565b6104f861055b3660046149e0565b611cc1565b61057361056e3660046149e0565b611d1e565b60405161030f9493929190615652565b6105966105913660046149e0565b611d7f565b60405161030f959493929190615441565b6103906105b5366004614b3a565b611df7565b6104606105c83660046145d7565b611e78565b6105e06105db36600461463d565b611ef1565b60405161030f919061520b565b6104806105fb3660046145ac565b611fb4565b61061361060e3660046149e0565b61200d565b60405161030f9493929190615167565b610480610631366004614486565b612049565b6106496106443660046149e0565b6120a8565b60405161030f93929190615512565b61066b6106663660046149e0565b612122565b60405161030f9291906153a8565b61039061215b565b61069461068f3660046149e0565b612161565b60405161030f94939291906154a4565b6106b76106b23660046149e0565b6121df565b60405161030f929190615689565b6104606106d3366004614438565b61222d565b6103906106e6366004614511565b61229b565b6106fe6106f9366004614a8b565b612757565b60405161030f919061563d565b6104806107193660046147e5565b612cc5565b61073161072c3660046149e0565b612ce4565b60405161030f9190615409565b61075161074c3660046146c1565b612d94565b60405161030f93929190615256565b61077361076e366004614438565b612ecc565b60405161030f929190615332565b61079461078f366004614ae3565b612ee5565b60405161030f93929190615836565b6107b66107b13660046149e0565b61311f565b60405161030f939291906155e1565b6000806107d9836107d461315c565b613180565b60006107f260048551866131c09092919063ffffffff16565b8060200190516108059190810190614993565b909350905060ff8116600681111561081957fe5b915050915091565b60008080610835848263ffffffff61320316565b92506001600160e01b0319831663012b8bc960e11b146108705760405162461bcd60e51b8152600401610867906157ff565b60405180910390fd5b61088184601063ffffffff61323716565b915061089484602463ffffffff61326a16565b929491935050565b6000806108a984846116da565b91506108b5848461229b565b90509250929050565b60008060006108cf846107d4613276565b60006108e860048651876131c09092919063ffffffff16565b8060200190516108fb9190810190614e1e565b9094509250905060ff8116600281111561091157fe5b9350509193909250565b600080600061092a858561089c565b91509150610938828261329a565b925050505b92915050565b6000606080610954846107d46132b0565b835161096a90859060049063ffffffff6131c016565b80602001905161097d9190810190614933565b9196909550909350915050565b600080610999836107d46132d4565b82516109af90849060049063ffffffff6131c016565b8060200190516109c291908101906148d5565b9094909350915050565b60008060606109dd846107d46132f8565b60006109f660048651876131c09092919063ffffffff16565b806020019051610a099190810190614dd2565b9094509250905060ff8116600181111561091157fe5b600080606080610a31856107d461331c565b8451610a4790869060049063ffffffff6131c016565b806020019051610a5a9190810190614891565b92989197509550909350915050565b600080610a78836107d4613340565b6000610a9160048551866131c09092919063ffffffff16565b806020019051610aa49190810190614d10565b9250905060ff81166003811115610ab757fe5b925050915091565b6000610ad1828263ffffffff61320316565b90506001600160e01b03198116630f47261b60e41b1415610afc57610af582611cc1565b5050610bb7565b6001600160e01b0319811663012b8bc960e11b1415610b2657610b1e82610821565b505050610bb7565b6001600160e01b0319811663a7cb5fb760e01b1415610b5257610b4882611d7f565b5050505050610bb7565b6001600160e01b031981166394cfcdd760e01b1415610b7457610b1e826120a8565b6001600160e01b0319811663619ce88560e11b1415610b9f57610b9682612161565b50505050610bb7565b60405162461bcd60e51b8152600401610867906157ff565b5050565b606060008251905080604051908082528060200260200182016040528015610bed578160200160208202803883390190505b50915060005b818114610c3657610c1785858381518110610c0a57fe5b602002602001015161229b565b838281518110610c2357fe5b6020908102919091010152600101610bf3565b505092915050565b604051606090630f47261b60e41b90610c5b908490602401615091565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915290505b919050565b60405160609063619ce88560e11b90610cb690869086908690602401615135565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915290505b9392505050565b6000806000610d03846107d4613364565b8351610d1990859060049063ffffffff6131c016565b80602001905161097d9190810190614306565b60608080806000610d43868263ffffffff61320316565b90506001600160e01b0319811663dedfc1f160e01b1415610d9b576040518060400160405280601181526020017f626174636843616e63656c4f726465727300000000000000000000000000000081525094506111e3565b6001600160e01b03198116634b4a520160e11b1415610df1576040518060400160405280600f81526020017f626174636846696c6c4f7264657273000000000000000000000000000000000081525094506111e3565b6001600160e01b031981166323aa37f960e21b1415610e47576040518060400160405280601681526020017f626174636846696c6c4f72646572734e6f5468726f770000000000000000000081525094506111e3565b6001600160e01b03198116632fbb8b8560e21b1415610e9d576040518060400160405280601581526020017f626174636846696c6c4f724b696c6c4f7264657273000000000000000000000081525094506111e3565b6001600160e01b03198116632da6298760e01b1415610ef3576040518060400160405280600b81526020017f63616e63656c4f7264657200000000000000000000000000000000000000000081525094506111e3565b6001600160e01b03198116634da26aab60e11b1415610f49576040518060400160405280600981526020017f66696c6c4f72646572000000000000000000000000000000000000000000000081525094506111e3565b6001600160e01b03198116633852d63160e21b1415610f9f576040518060400160405280600f81526020017f66696c6c4f724b696c6c4f72646572000000000000000000000000000000000081525094506111e3565b6001600160e01b031981166378d29ac160e01b1415610ff5576040518060400160405280601681526020017f6d61726b65744275794f72646572734e6f5468726f770000000000000000000081525094506111e3565b6001600160e01b0319811663369da09960e01b141561104b576040518060400160405280601781526020017f6d61726b657453656c6c4f72646572734e6f5468726f7700000000000000000081525094506111e3565b6001600160e01b03198116638bc8efb360e01b14156110a1576040518060400160405280601981526020017f6d61726b65744275794f726465727346696c6c4f724b696c6c0000000000000081525094506111e3565b6001600160e01b0319811663a6c3bf3360e01b14156110f7576040518060400160405280601a81526020017f6d61726b657453656c6c4f726465727346696c6c4f724b696c6c00000000000081525094506111e3565b6001600160e01b031981166388ec79fb60e01b141561114d576040518060400160405280600b81526020017f6d617463684f726465727300000000000000000000000000000000000000000081525094506111e3565b6001600160e01b031981167f4f9559b10000000000000000000000000000000000000000000000000000000014806111ae57506001600160e01b031981167f2280c91000000000000000000000000000000000000000000000000000000000145b156111cb5760405162461bcd60e51b815260040161086790615791565b60405162461bcd60e51b81526004016108679061575a565b6001600160e01b0319811663dedfc1f160e01b141561126f57855161121290879060049063ffffffff61338816565b806020019051611225919081019061460a565b604080516000808252602082019092529195505b5060408051600080825260208201909252919450611267565b60608152602001906001900390816112525790505b5091506115d9565b6001600160e01b03198116632fbb8b8560e21b148061129e57506001600160e01b03198116634b4a520160e11b145b806112b957506001600160e01b031981166323aa37f960e21b145b156112d3576112c786613408565b919550935091506115d9565b6001600160e01b03198116632da6298760e01b14156113a25760408051600180825281830190925290816020015b611309613be4565b815260200190600190039081611301575050865190945061133490879060049063ffffffff61338816565b8060200190516113479190810190614a58565b8460008151811061135457fe5b60200260200101819052506000604051908082528060200260200182016040528015611239578160200160208202803883390190505060408051600080825260208201909252919450611267565b6001600160e01b03198116633852d63160e21b14806113d157506001600160e01b03198116634da26aab60e11b145b156113df576112c786613437565b6001600160e01b031981166378d29ac160e01b148061140e57506001600160e01b0319811663369da09960e01b145b8061142957506001600160e01b03198116638bc8efb360e01b145b8061144457506001600160e01b0319811663a6c3bf3360e01b145b15611452576112c786613531565b6001600160e01b031981166388ec79fb60e01b14156115d957611473613be4565b61147b613be4565b60608061149560048b518c6133889092919063ffffffff16565b8060200190516114a89190810190614b93565b604080516002808252606082019092529498509296509094509250816020015b6114d0613be4565b8152602001906001900390816114c857905050975083886000815181106114f357fe5b6020026020010181905250828860018151811061150c57fe5b602090810291909101015260408051600280825260608201909252908160200160208202803883390190505096508360a001518760008151811061154c57fe5b6020026020010181815250508260a001518760018151811061156a57fe5b60209081029190910101526040805160028082526060820190925290816020015b606081526020019060019003908161158b57905050955081866000815181106115b057fe5b602002602001018190525080866001815181106115c957fe5b6020026020010181905250505050505b509193509193565b6000806115f0836107d46135a5565b825161160690849060049063ffffffff6131c016565b8060200190516109c291908101906149b7565b600061169a846116956040518060400160405280600b81526020017f30782050726f746f636f6c0000000000000000000000000000000000000000008152506040518060400160405280600581526020017f332e302e3000000000000000000000000000000000000000000000000000000081525087876135c9565b613620565b949350505050565b6000806116b1836107d4613634565b82516116c790849060049063ffffffff6131c016565b8060200190516109c291908101906142cd565b6000806116ed838263ffffffff61320316565b90506001600160e01b03198116630f47261b60e41b141561181f57600061171b84601063ffffffff61323716565b6040519091506060907f70a082310000000000000000000000000000000000000000000000000000000090611754908890602401615091565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060836001600160a01b0316836040516117a59190615075565b600060405180830381855afa9150503d80600081146117e0576040519150601f19603f3d011682016040523d82523d6000602084013e6117e5565b606091505b50915091508180156117f8575080516020145b611803576000611814565b61181481600063ffffffff61326a16565b955050505050611cba565b6001600160e01b0319811663012b8bc960e11b14156119775760008061184485610821565b6040519194509250606091507f6352211e0000000000000000000000000000000000000000000000000000000090611880908490602401615357565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060846001600160a01b0316836040516118d19190615075565b600060405180830381855afa9150503d806000811461190c576040519150601f19603f3d011682016040523d82523d6000602084013e611911565b606091505b50915091506000828015611926575081516020145b611931576000611942565b61194282600c63ffffffff61323716565b9050896001600160a01b0316816001600160a01b031614611964576000611967565b60015b60ff169750505050505050611cba565b6001600160e01b0319811663a7cb5fb760e01b1415611b1757600060608061199e86611d7f565b5081519296509094509250905060005b818114611b0d5783516060907efdd58e00000000000000000000000000000000000000000000000000000000908b908790859081106119e957fe5b6020026020010151604051602401611a0292919061519b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060876001600160a01b031683604051611a539190615075565b600060405180830381855afa9150503d8060008114611a8e576040519150601f19603f3d011682016040523d82523d6000602084013e611a93565b606091505b50915091506000828015611aa8575081516020145b611ab3576000611ac4565b611ac482600063ffffffff61326a16565b90506000878681518110611ad457fe5b60200260200101518281611ae457fe5b0490508b811080611af357508b155b15611afc57809b505b5050600190930192506119ae915050565b5050505050611cba565b6001600160e01b0319811663619ce88560e11b1415611c1c576040516060907fa85e59e40000000000000000000000000000000000000000000000000000000090611b6d9086906000908190819060240161555a565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925260045491519092506000916001600160a01b031690611bbf908490615075565b600060405180830381855afa9150503d8060008114611bfa576040519150601f19603f3d011682016040523d82523d6000602084013e611bff565b606091505b5050905080611c0f576000611c13565b6000195b93505050611cba565b6001600160e01b031981166394cfcdd760e01b1415611cba57606080611c41856120a8565b80519194509250905060005b818114611cb5576000611c7389858481518110611c6657fe5b60200260200101516116da565b90506000858381518110611c8357fe5b60200260200101518281611c9357fe5b04905087811080611ca2575087155b15611cab578097505b5050600101611c4d565b505050505b5092915050565b600080611cd4838263ffffffff61320316565b91506001600160e01b03198216630f47261b60e41b14611d065760405162461bcd60e51b8152600401610867906157ff565b611d1783601063ffffffff61323716565b9050915091565b60008060006060611d31856107d4613658565b6000611d4a60048751886131c09092919063ffffffff16565b806020019051611d5d9190810190614d74565b91965094509250905060ff81166006811115611d7557fe5b9450509193509193565b60008060608080611d96868563ffffffff61320316565b94506001600160e01b0319851663a7cb5fb760e01b14611dc85760405162461bcd60e51b8152600401610867906157ff565b505050506024828101516044840151606485015160848601519496929591820184019490820184019391010190565b600061169a84611e736040518060400160405280600b81526020017f30782050726f746f636f6c0000000000000000000000000000000000000000008152506040518060400160405280600581526020017f332e302e3000000000000000000000000000000000000000000000000000000081525087876135c9565b61367c565b6060808251604051908082528060200260200182016040528015611ea6578160200160208202803883390190505b50905060005b83518114611cba57838181518110611ec057fe5b60200260200101516001600160a01b031631828281518110611ede57fe5b6020908102919091010152600101611eac565b606060008451905080604051908082528060200260200182016040528015611f23578160200160208202803883390190505b50915060005b818114611fab57611f74868281518110611f3f57fe5b6020026020010151868381518110611f5357fe5b6020026020010151868481518110611f6757fe5b6020026020010151612757565b838281518110611f8057fe5b60200260200101906004811115611f9357fe5b90816004811115611fa057fe5b905250600101611f29565b50509392505050565b60405160609063012b8bc960e11b90611fd3908590859060240161519b565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905092915050565b60006060806060612020856107d461368b565b845161203690869060049063ffffffff6131c016565b806020019051610a5a91908101906143a0565b60405160609063a7cb5fb760e01b9061206c9087908790879087906024016150e3565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050949350505050565b60006060806120bd848463ffffffff61320316565b92506001600160e01b031983166394cfcdd760e01b146120ef5760405162461bcd60e51b8152600401610867906157ff565b835161210590859060049063ffffffff61338816565b806020019051612118919081019061481a565b9395909450915050565b60006060612132836107d46136af565b825161214890849060049063ffffffff6131c016565b8060200190516109c291908101906148f8565b60055481565b600080606081612177858263ffffffff61320316565b93506001600160e01b0319841663619ce88560e11b146121a95760405162461bcd60e51b8152600401610867906157ff565b84516121bf90869060049063ffffffff61338816565b8060200190516121d29190810190614348565b9597919650949350915050565b6000806121ee836107d46136d3565b600061220760048551866131c09092919063ffffffff16565b80602001905161221a9190810190614d10565b9250905060ff81166001811115610ab757fe5b60606000825190508060405190808252806020026020018201604052801561225f578160200160208202803883390190505b50915060005b818114610c365761227c85858381518110611c6657fe5b83828151811061228857fe5b6020908102919091010152600101612265565b6000806122ae838263ffffffff61320316565b90506001600160e01b031981166394cfcdd760e01b1415612347576060806122d5856120a8565b80519194509250905060005b81811461233c5760006122fa89858481518110610c0a57fe5b9050600085838151811061230a57fe5b6020026020010151828161231a57fe5b04905087811080612329575087155b15612332578097505b50506001016122e1565b5061093d9350505050565b6001600160e01b03198116630f47261b60e41b14156123b957600061237384601063ffffffff61323716565b6001546040519192506060917fdd62ed3e00000000000000000000000000000000000000000000000000000000916117549189916001600160a01b0316906024016150a5565b6001600160e01b0319811663012b8bc960e11b1415612605576000806123de85610821565b6002546040519295509093506060925063e985e9c560e01b91612411918a916001600160a01b03909116906024016150a5565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060846001600160a01b0316836040516124629190615075565b600060405180830381855afa9150503d806000811461249d576040519150601f19603f3d011682016040523d82523d6000602084013e6124a2565b606091505b50915091508115806124b657508051602014155b806124d257506124cd81600063ffffffff61326a16565b600114155b156125f6576040516060907f081812fc000000000000000000000000000000000000000000000000000000009061250d908790602401615357565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050856001600160a01b03168160405161255a9190615075565b600060405180830381855afa9150503d8060008114612595576040519150601f19603f3d011682016040523d82523d6000602084013e61259a565b606091505b5090935091508280156125ae575081516020145b80156125dd57506002546001600160a01b03166125d283600c63ffffffff61323716565b6001600160a01b0316145b6125e85760006125eb565b60015b60ff16975050611b0d565b60001996505050505050611cba565b6001600160e01b0319811663a7cb5fb760e01b141561273357600061262984611d7f565b50506003546040519294506060935063e985e9c560e01b9261265a925089916001600160a01b0316906024016150a5565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006060836001600160a01b0316836040516126ab9190615075565b600060405180830381855afa9150503d80600081146126e6576040519150601f19603f3d011682016040523d82523d6000602084013e6126eb565b606091505b50915091508180156126fe575080516020145b801561271a575061271681600063ffffffff61326a16565b6001145b612725576000611814565b600019955050505050611cba565b6001600160e01b0319811663619ce88560e11b1415611cba57506000199392505050565b6000612761613c77565b6127f28584600660009054906101000a90046001600160a01b03166001600160a01b0316631ce4c78b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156127b457600080fd5b505afa1580156127c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506127ec9190810190614cf8565b3a6136f7565b60408051600480825260a0820190925291925060609190816020015b606081526020019060019003908161280e57505060408051600480825260a082019092529192506060919060208201608080388339505060408051600480825260a08201909252929350606092915060208201608080388339505060408051600480825260a08201909252929350606092915060208201608080388339019050509050886101600151846000815181106128a457fe5b602002602001018190525087836000815181106128bd57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508860000151826000815181106128ef57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050868160008151811061291d57fe5b6020026020010181815250508861014001518460018151811061293c57fe5b602002602001018190525088600001518360018151811061295957fe5b60200260200101906001600160a01b031690816001600160a01b031681525050878260018151811061298757fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508460000151816001815181106129b957fe5b602002602001018181525050886101a00151846002815181106129d857fe5b602002602001018190525087836002815181106129f157fe5b60200260200101906001600160a01b031690816001600160a01b031681525050886040015182600281518110612a2357fe5b60200260200101906001600160a01b031690816001600160a01b031681525050846060015181600281518110612a5557fe5b60200260200101818152505088610180015184600381518110612a7457fe5b6020026020010181905250886000015183600381518110612a9157fe5b60200260200101906001600160a01b031690816001600160a01b031681525050886040015182600381518110612ac357fe5b60200260200101906001600160a01b031690816001600160a01b031681525050846040015181600381518110612af557fe5b60209081029190910101526040516060907fb04fbddd0000000000000000000000000000000000000000000000000000000090612b3c9087908790879087906024016151b4565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925260065491519092506060916001600160a01b031690612b8e908490615075565b6000604051808303816000865af19150503d8060008114612bcb576040519150601f19603f3d011682016040523d82523d6000602084013e612bd0565b606091505b50915060009050612be7828263ffffffff61320316565b9050612bf16132f8565b6001600160e01b031982811691161415612c33576000612c10836109cc565b5091505060ff81166004811115612c2357fe5b9950505050505050505050610ceb565b612c3b6132b0565b6001600160e01b031982811691161415612c6e576000612c5a83610943565b509091505060ff81166004811115612c2357fe5b815160208301207ff43f26ea5a94b478394a975e856464913dc1a8a1ca70939d974aa7c238aa0ce01415612cad57600498505050505050505050610ceb565b60405162461bcd60e51b815260040161086790615723565b6040516060906394cfcdd760e01b90611fd39085908590602401615304565b6000612cf6828263ffffffff61320316565b90506001600160e01b03198116630f47261b60e41b1480612d2757506001600160e01b0319811663012b8bc960e11b145b80612d4257506001600160e01b0319811663a7cb5fb760e01b145b80612d5d57506001600160e01b031981166394cfcdd760e01b145b80612d7857506001600160e01b0319811663619ce88560e11b145b610c905760405162461bcd60e51b8152600401610867906157ff565b606080606060008551905080604051908082528060200260200182016040528015612dd957816020015b612dc6613ca6565b815260200190600190039081612dbe5790505b50935080604051908082528060200260200182016040528015612e06578160200160208202803883390190505b50925080604051908082528060200260200182016040528015612e33578160200160208202803883390190505b50915060005b818114612ec357612e70878281518110612e4f57fe5b6020026020010151878381518110612e6357fe5b6020026020010151612ee5565b8751889085908110612e7e57fe5b60200260200101878581518110612e9157fe5b60200260200101878681518110612ea457fe5b9315156020948502919091019093019290925291905252600101612e39565b50509250925092565b606080612ed9848461222d565b91506108b58484610bbb565b612eed613ca6565b600080546040517f9d3fa4b900000000000000000000000000000000000000000000000000000000815282916001600160a01b031690639d3fa4b990612f3790889060040161585a565b60606040518083038186803b158015612f4f57600080fd5b505afa158015612f63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612f879190810190614a13565b85516000546040517fa12dcc6f00000000000000000000000000000000000000000000000000000000815292955090916001600160a01b039091169063a12dcc6f90612fd9908990899060040161586d565b60206040518083038186803b158015612ff157600080fd5b505afa158015613005573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506130299190810190614871565b9150600061303c8288610140015161091b565b60a088015160c08901516101808a01516101408b01519394509192909160009161306b9163ffffffff61376e16565b15613098576130918461308b848d6080015161379390919063ffffffff16565b856137af565b90506130f1565b816130ac57613091848b60800151856137af565b60006130bd868c610180015161091b565b905060006130d0868d60800151876137af565b905060006130df8386886137af565b90506130eb828261329a565b93505050505b61311161310b8960400151856137d190919063ffffffff16565b8261329a565b965050505050509250925092565b6000806000613130846107d46137f0565b600061314960048651876131c09092919063ffffffff16565b8060200190516108fb9190810190614d3d565b7ffdb6ca8d0000000000000000000000000000000000000000000000000000000090565b600061318d836000613203565b90506001600160e01b0319808216908316146131bb5760405162461bcd60e51b8152600401610867906157c8565b505050565b6060818311156131de576131de6131d960008585613814565b613833565b83518211156131f7576131f76131d96001848751613814565b50819003910190815290565b60008160040183511015613224576132246131d96003855185600401613814565b5001602001516001600160e01b03191690565b60008160140183511015613258576132586131d96004855185601401613814565b5001601401516001600160a01b031690565b6000610ceb838361383b565b7f18e4b1410000000000000000000000000000000000000000000000000000000090565b60008183106132a95781610ceb565b5090919050565b7f4678472b0000000000000000000000000000000000000000000000000000000090565b7fb6555d6f0000000000000000000000000000000000000000000000000000000090565b7f488219a60000000000000000000000000000000000000000000000000000000090565b7f1b8388f70000000000000000000000000000000000000000000000000000000090565b7fe94a7ed00000000000000000000000000000000000000000000000000000000090565b7f4ad312750000000000000000000000000000000000000000000000000000000090565b6060818311156133a1576133a16131d960008585613814565b83518211156133ba576133ba6131d96001848751613814565b8282036040519080825280601f01601f1916602001820160405280156133e7576020820181803883390190505b509050610ceb6133f682613865565b8461340087613865565b01835161386b565b606080606061342460048551866133889092919063ffffffff16565b80602001905161097d9190810190614718565b60408051600180825281830190925260609182918291816020015b61345a613be4565b8152602001906001900390816134525750506040805160018082528183019092529194506020808301908038833901905050604080516001808252818301909252919350816020015b60608152602001906001900390816134a357505084519091506134d090859060049063ffffffff61338816565b8060200190516134e39190810190614bec565b856000815181106134f057fe5b602002602001018560008151811061350457fe5b602002602001018560008151811061351857fe5b6020908102919091010192909252919052529193909250565b60408051600180825281830190925260609182918291602080830190803883395050855191935061356d9186915060049063ffffffff61338816565b8060200190516135809190810190614792565b8451859060009061358d57fe5b60209081029190910101919091529095929450925050565b7f11c7b7200000000000000000000000000000000000000000000000000000000090565b8351602094850120835193850193909320604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f815295860194909452928401929092526060830152608082015260a0902090565b6000610ceb8261362f85613910565b61398b565b7fa15c0d060000000000000000000000000000000000000000000000000000000090565b7f7e5a23180000000000000000000000000000000000000000000000000000000090565b6000610ceb8261362f856139c5565b7f5bd0428d0000000000000000000000000000000000000000000000000000000090565b7f20d11f610000000000000000000000000000000000000000000000000000000090565b7ff59851840000000000000000000000000000000000000000000000000000000090565b6136ff613c77565b6020810184905260a0850151608086015161371b918691613a7e565b815260a085015160c0860151613732918691613a7e565b604082015260a085015160e086015161374c918691613a7e565b6060820152613761828463ffffffff613ab216565b6080820152949350505050565b600081518351148015610ceb5750508051602091820120825192909101919091201490565b600082820183811015610ceb57610ceb6131d960008686613adf565b600061169a836137c5868563ffffffff613ab216565b9063ffffffff613afe16565b6000828211156137ea576137ea6131d960028585613adf565b50900390565b7fe53c76c80000000000000000000000000000000000000000000000000000000090565b6060632800659560e01b848484604051602401610cb69392919061562f565b805160208201fd5b6000816020018351101561385c5761385c6131d96005855185602001613814565b50016020015190565b60200190565b6020811015613895576001816020036101000a0380198351168185511680821786525050506131bb565b828214156138a2576131bb565b828211156138dc5760208103905080820181840181515b828510156138d45784518652602095860195909401936138b9565b9052506131bb565b60208103905080820181840183515b818612156139075782518252601f1992830192909101906138eb565b85525050505050565b608081810151825160208085015160408087015160609788015186519685019690962082517fec69816980a3a3ca4554410e60253953e9ff375ba4536a98adfa15cc7154150881529485019590955290830191909152948101949094526001600160a01b039091169183019190915260a082015260c0902090565b6040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6101408101516101608201516101808301516101a08401516000937ff80322eb8376aafb64eadf8f0d7623f22130fd9491a221e902b713cb984a753493909290916020871015613a1157fe5b601f1987018051610140890180516101608b0180516101808d0180516101a08f0180519d89528c5160209d8e012087528b519b8d019b909b2084528951998c01999099208152875197909a019690962088526101e085209390945290529190529252919091529050919050565b6000613a8b848484613b28565b15613a9e57613a9e6131d9858585613b8e565b61169a836137c5868563ffffffff613ab216565b600082613ac15750600061093d565b82820282848281613ace57fe5b0414610ceb57610ceb6131d9600186865b606063e946c1bb60e01b848484604051602401610cb6939291906155c0565b600081613b1457613b146131d960038585613adf565b6000828481613b1f57fe5b04949350505050565b600082613b3a57613b3a6131d9613bad565b811580613b45575083155b15613b5257506000610ceb565b60008380613b5c57fe5b8584099050613b71858463ffffffff613ab216565b613b83826103e863ffffffff613ab216565b101595945050505050565b606063339f3de260e01b848484604051602401610cb693929190615892565b60408051808201909152600481527fa791837c00000000000000000000000000000000000000000000000000000000602082015290565b604051806101c0016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001606081525090565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b803561093d81615979565b805161093d81615979565b600082601f830112613cec578081fd5b8135613cff613cfa826158cf565b6158a8565b818152915060208083019084810181840286018201871015613d2057600080fd5b60005b84811015611cb5578135613d3681615979565b84529282019290820190600101613d23565b600082601f830112613d58578081fd5b8151613d66613cfa826158cf565b8181529150602080830190840160005b83811015613da357613d8e8760208451890101613fc8565b83526020928301929190910190600101613d76565b5050505092915050565b600082601f830112613dbd578081fd5b8135613dcb613cfa826158cf565b8181529150602080830190840160005b83811015613da357613df38760208435890101613f7a565b83526020928301929190910190600101613ddb565b600082601f830112613e18578081fd5b8151613e26613cfa826158cf565b8181529150602080830190840160005b83811015613da357613e4e876020845189010161415d565b83526020928301929190910190600101613e36565b600082601f830112613e73578081fd5b8135613e81613cfa826158cf565b8181529150602080830190840160005b83811015613da357613ea9876020843589010161400e565b83526020928301929190910190600101613e91565b600082601f830112613ece578081fd5b8151613edc613cfa826158cf565b818152915060208083019084810181840286018201871015613efd57600080fd5b60005b84811015611cb557815184529282019290820190600101613f00565b600082601f830112613f2c578081fd5b8135613f3a613cfa826158cf565b818152915060208083019084810181840286018201871015613f5b57600080fd5b60005b84811015611cb557813584529282019290820190600101613f5e565b600082601f830112613f8a578081fd5b8135613f98613cfa826158ef565b9150808252836020828501011115613faf57600080fd5b8060208401602084013760009082016020015292915050565b600082601f830112613fd8578081fd5b8151613fe6613cfa826158ef565b9150808252836020828501011115613ffd57600080fd5b611cba81602084016020860161591e565b60006101c0808385031215614021578182fd5b61402a816158a8565b9150506140378383613cc6565b81526140468360208401613cc6565b60208201526140588360408401613cc6565b604082015261406a8360608401613cc6565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e08201526101008083013581830152506101208083013581830152506101408083013567ffffffffffffffff808211156140cc57600080fd5b6140d886838701613f7a565b838501526101609250828501359150808211156140f457600080fd5b61410086838701613f7a565b8385015261018092508285013591508082111561411c57600080fd5b61412886838701613f7a565b838501526101a092508285013591508082111561414457600080fd5b5061415185828601613f7a565b82840152505092915050565b60006101c0808385031215614170578182fd5b614179816158a8565b9150506141868383613cd1565b81526141958360208401613cd1565b60208201526141a78360408401613cd1565b60408201526141b98360608401613cd1565b60608201526080820151608082015260a082015160a082015260c082015160c082015260e082015160e08201526101008083015181830152506101208083015181830152506101408083015167ffffffffffffffff8082111561421b57600080fd5b61422786838701613fc8565b8385015261016092508285015191508082111561424357600080fd5b61424f86838701613fc8565b8385015261018092508285015191508082111561426b57600080fd5b61427786838701613fc8565b838501526101a092508285015191508082111561429357600080fd5b5061415185828601613fc8565b805160ff8116811461093d57600080fd5b6000602082840312156142c2578081fd5b8135610ceb81615979565b600080604083850312156142df578081fd5b82516142ea81615979565b60208401519092506142fb81615979565b809150509250929050565b60008060006060848603121561431a578081fd5b835161432581615979565b602085015190935061433681615979565b80925050604084015190509250925092565b60008060006060848603121561435c578081fd5b835161436781615979565b602085015190935067ffffffffffffffff811115614383578182fd5b61438f86828701613fc8565b925050604084015190509250925092565b600080600080608085870312156143b5578182fd5b84516143c081615979565b602086015190945067ffffffffffffffff808211156143dd578384fd5b6143e988838901613fc8565b945060408701519150808211156143fe578384fd5b61440a88838901613fc8565b9350606087015191508082111561441f578283fd5b5061442c87828801613fc8565b91505092959194509250565b6000806040838503121561444a578182fd5b823561445581615979565b9150602083013567ffffffffffffffff811115614470578182fd5b61447c85828601613dad565b9150509250929050565b6000806000806080858703121561449b578182fd5b84356144a681615979565b9350602085013567ffffffffffffffff808211156144c2578384fd5b6144ce88838901613f1c565b945060408701359150808211156144e3578384fd5b6144ef88838901613f1c565b93506060870135915080821115614504578283fd5b5061442c87828801613f7a565b60008060408385031215614523578182fd5b823561452e81615979565b9150602083013567ffffffffffffffff811115614549578182fd5b61447c85828601613f7a565b600080600060608486031215614569578081fd5b833561457481615979565b9250602084013567ffffffffffffffff81111561458f578182fd5b61459b86828701613f7a565b925050604084013590509250925092565b600080604083850312156145be578182fd5b82356145c981615979565b946020939093013593505050565b6000602082840312156145e8578081fd5b813567ffffffffffffffff8111156145fe578182fd5b61169a84828501613cdc565b60006020828403121561461b578081fd5b815167ffffffffffffffff811115614631578182fd5b61169a84828501613e08565b600080600060608486031215614651578081fd5b833567ffffffffffffffff80821115614668578283fd5b61467487838801613e63565b94506020860135915080821115614689578283fd5b61469587838801613cdc565b935060408601359150808211156146aa578283fd5b506146b786828701613f1c565b9150509250925092565b600080604083850312156146d3578182fd5b823567ffffffffffffffff808211156146ea578384fd5b6146f686838701613e63565b9350602085013591508082111561470b578283fd5b5061447c85828601613dad565b60008060006060848603121561472c578081fd5b835167ffffffffffffffff80821115614743578283fd5b61474f87838801613e08565b94506020860151915080821115614764578283fd5b61477087838801613ebe565b93506040860151915080821115614785578283fd5b506146b786828701613d48565b6000806000606084860312156147a6578081fd5b835167ffffffffffffffff808211156147bd578283fd5b6147c987838801613e08565b9450602086015193506040860151915080821115614785578283fd5b600080604083850312156147f7578182fd5b823567ffffffffffffffff8082111561480e578384fd5b6146f686838701613f1c565b6000806040838503121561482c578182fd5b825167ffffffffffffffff80821115614843578384fd5b61484f86838701613ebe565b93506020850151915080821115614864578283fd5b5061447c85828601613d48565b600060208284031215614882578081fd5b81518015158114610ceb578182fd5b600080600080608085870312156148a6578182fd5b8451935060208501516148b881615979565b604086015190935067ffffffffffffffff808211156143fe578384fd5b600080604083850312156148e7578182fd5b505080516020909101519092909150565b6000806040838503121561490a578182fd5b82519150602083015167ffffffffffffffff811115614927578182fd5b61447c85828601613fc8565b600080600060608486031215614947578081fd5b83519250602084015167ffffffffffffffff80821115614965578283fd5b61497187838801613fc8565b93506040860151915080821115614986578283fd5b506146b786828701613fc8565b600080604083850312156149a5578182fd5b8251915060208301516142fb8161598e565b600080604083850312156149c9578182fd5b82516001600160e01b0319811681146142ea578283fd5b6000602082840312156149f1578081fd5b813567ffffffffffffffff811115614a07578182fd5b61169a84828501613f7a565b600060608284031215614a24578081fd5b614a2e60606158a8565b614a3884846142a0565b815260208301516020820152604083015160408201528091505092915050565b600060208284031215614a69578081fd5b815167ffffffffffffffff811115614a7f578182fd5b61169a8482850161415d565b600080600060608486031215614a9f578081fd5b833567ffffffffffffffff811115614ab5578182fd5b614ac18682870161400e565b9350506020840135614ad281615979565b929592945050506040919091013590565b60008060408385031215614af5578182fd5b823567ffffffffffffffff80821115614b0c578384fd5b614b188683870161400e565b93506020850135915080821115614b2d578283fd5b5061447c85828601613f7a565b600080600060608486031215614b4e578081fd5b833567ffffffffffffffff811115614b64578182fd5b614b708682870161400e565b935050602084013591506040840135614b8881615979565b809150509250925092565b60008060008060808587031215614ba8578182fd5b845167ffffffffffffffff80821115614bbf578384fd5b614bcb8883890161415d565b95506020870151915080821115614be0578384fd5b6143e98883890161415d565b600080600060608486031215614c00578081fd5b835167ffffffffffffffff80821115614c17578283fd5b614c238783880161415d565b9450602086015193506040860151915080821115614986578283fd5b600080600060608486031215614c53578081fd5b833567ffffffffffffffff80821115614c6a578283fd5b81860160a08189031215614c7c578384fd5b614c8660a06158a8565b92508035835260208101356020840152604081013560408401526060810135614cae81615979565b6060840152608081013582811115614cc4578485fd5b614cd089828401613f7a565b608085015250919450505060208401359150614cef8560408601613cc6565b90509250925092565b600060208284031215614d09578081fd5b5051919050565b60008060408385031215614d22578182fd5b8251614d2d8161598e565b6020939093015192949293505050565b600080600060608486031215614d51578081fd5b8351614d5c8161598e565b602085015160408601519194509250614b8881615979565b60008060008060808587031215614d89578182fd5b614d9386866142a0565b9350602085015192506040850151614daa81615979565b606086015190925067ffffffffffffffff811115614dc6578182fd5b61442c87828801613fc8565b600080600060608486031215614de6578081fd5b614df085856142a0565b925060208401519150604084015167ffffffffffffffff811115614e12578182fd5b6146b786828701613fc8565b600080600060608486031215614e32578081fd5b614e3c85856142a0565b925060208401519150604084015190509250925092565b6001600160a01b03169052565b6000815180845260208401935060208301825b82811015614e9a5781516001600160a01b0316865260209586019590910190600101614e73565b5093949350505050565b600081518084526020840180819550602083028101915060208501845b84811015614eef578284038852614ed9848351614f2c565b6020988901989094509190910190600101614ec1565b50919695505050505050565b6000815180845260208401935060208301825b82811015614e9a578151865260209586019590910190600101614f0e565b60008151808452614f4481602086016020860161591e565b601f01601f19169290920160200192915050565b805160ff16825260208082015190830152604090810151910152565b60006101c0614f84848451614e53565b6020830151614f966020860182614e53565b506040830151614fa96040860182614e53565b506060830151614fbc6060860182614e53565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e085015261010080840151818601525061012080840151818601525061014080840151828287015261501583870182614f2c565b915050610160915081840151858203838701526150328282614f2c565b92505050610180808401518583038287015261504e8382614f2c565b9150506101a09150818401518582038387015261506b8282614f2c565b9695505050505050565b6000825161508781846020870161591e565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60006001600160a01b0386168252608060208301526151056080830186614efb565b82810360408401526151178186614efb565b83810360608501526151298186614f2c565b98975050505050505050565b60006001600160a01b0385168252606060208301526151576060830185614f2c565b9050826040830152949350505050565b60006001600160a01b0386168252608060208301526151896080830186614f2c565b82810360408401526151178186614f2c565b6001600160a01b03929092168252602082015260400190565b6000608082526151c76080830187614ea4565b82810360208401526151d98187614e60565b83810360408501526151eb8187614e60565b91505082810360608401526152008185614efb565b979650505050505050565b602080825282518282018190526000918401906040840190835b8181101561524b576152378451615913565b835260209384019390920191600101615225565b509095945050505050565b606080825284519082018190526000906020906080840190828801845b8281101561529957615286848351614f58565b6060939093019290840190600101615273565b505050838103828501526152ad8187614efb565b84810360408601528551808252908301915082860190845b818110156152e35782511515845292840192918401916001016152c5565b509198975050505050505050565b600060208252610ceb6020830184614efb565b6000604082526153176040830185614efb565b82810360208401526153298185614ea4565b95945050505050565b6000604082526153456040830185614efb565b82810360208401526153298185614efb565b90815260200190565b60008582526001600160a01b0385166020830152608060408301526153886080830185614f2c565b82810360608401526152008185614f2c565b918252602082015260400190565b60008382526040602083015261169a6040830184614f2c565b6000848252606060208301526153da6060830185614f2c565b828103604084015261506b8185614f2c565b828152604081016153fc8361596f565b8260208301529392505050565b6001600160e01b031991909116815260200190565b6001600160e01b03199290921682526001600160a01b0316602082015260400190565b60006001600160e01b0319871682526001600160a01b038616602083015260a0604083015261547360a0830186614efb565b82810360608401526154858186614efb565b83810360808501526154978186614f2c565b9998505050505050505050565b60006001600160e01b0319861682526001600160a01b0385166020830152608060408301526154d66080830185614f2c565b905082606083015295945050505050565b6001600160e01b03199390931683526001600160a01b03919091166020830152604082015260600190565b60006001600160e01b031985168252606060208301526155356060830185614efb565b828103604084015261506b8185614ea4565b600060208252610ceb6020830184614f2c565b60006080825261556d6080830187614f2c565b6001600160a01b03958616602084015293909416604082015260ff9190911660609091015292915050565b60006155a38561594e565b848252836020830152606060408301526153296060830184614f2c565b606081016155cd8561595b565b938152602081019290925260409091015290565b606081016155ee85615965565b93815260208101929092526001600160a01b031660409091015290565b604081016156188461595b565b9281526020015290565b606081016155cd85615965565b60608101600885106155cd57fe5b6020810161564a83615913565b825292915050565b600061565d8661596f565b8582528460208301526001600160a01b03841660408301526080606083015261506b6080830184614f2c565b604081016156188461594e565b6000608082526156a96080830187614f2c565b602083820381850152818751808452828401915082838202850101838a01865b838110156156f757601f198784030185526156e5838351614f74565b948601949250908501906001016156c9565b5050868103604088015261570b818a614efb565b94505050505082810360608401526152008185614ea4565b60208082526013908201527f554e4b4e4f574e5f52455455524e5f4441544100000000000000000000000000604082015260600190565b60208082526019908201527f554e4b4e4f574e5f46554e4354494f4e5f53454c4543544f5200000000000000604082015260600190565b6020808252600d908201527f554e494d504c454d454e54454400000000000000000000000000000000000000604082015260600190565b6020808252600c908201527f4241445f53454c4543544f520000000000000000000000000000000000000000604082015260600190565b6020808252600e908201527f57524f4e475f50524f58595f4944000000000000000000000000000000000000604082015260600190565b60a081016158448286614f58565b8360608301528215156080830152949350505050565b600060208252610ceb6020830184614f74565b6000604082526158806040830185614f74565b82810360208401526153298185614f2c565b9283526020830191909152604082015260600190565b60405181810167ffffffffffffffff811182821017156158c757600080fd5b604052919050565b600067ffffffffffffffff8211156158e5578081fd5b5060209081020190565b600067ffffffffffffffff821115615905578081fd5b50601f01601f191660200190565b8060058110610c9057fe5b60005b83811015615939578181015183820152602001615921565b83811115615948576000848401525b50505050565b6002811061595857fe5b50565b6004811061595857fe5b6003811061595857fe5b6007811061595857fe5b6001600160a01b038116811461595857600080fd5b60ff8116811461595857600080fdfea365627a7a72315820a90c93bc636cf863e6e16fc0c4b6869195e557e923eae128ff96ab4e690fc54f6c6578706572696d656e74616cf564736f6c634300050d0040" } } }, "compiler": { "name": "solc", - "version": "soljson-v0.5.12+commit.7709ece9.js", + "version": "soljson-v0.5.13+commit.5b0b510c.js", "settings": { "optimizer": { "enabled": true, - "runs": 10000, + "runs": 1666, "details": { "yul": true, "deduplicate": true, "cse": true, "constantOptimizer": true } }, "outputSelection": { diff --git a/python-packages/order_utils/setup.py b/python-packages/order_utils/setup.py index f54c1defde..8a899270ca 100755 --- a/python-packages/order_utils/setup.py +++ b/python-packages/order_utils/setup.py @@ -182,6 +182,7 @@ setup( "deprecated", "web3", "eth-abi", + "eth_typing", "eth_utils", "mypy_extensions", ], diff --git a/python-packages/order_utils/src/zero_ex/order_utils/__init__.py b/python-packages/order_utils/src/zero_ex/order_utils/__init__.py index f5e7b0721f..845b74bd7b 100644 --- a/python-packages/order_utils/src/zero_ex/order_utils/__init__.py +++ b/python-packages/order_utils/src/zero_ex/order_utils/__init__.py @@ -23,6 +23,7 @@ from typing import cast, Tuple, Union from pkg_resources import resource_string from mypy_extensions import TypedDict +from eth_typing import HexStr from eth_utils import keccak, remove_0x_prefix, to_bytes, to_checksum_address from web3 import Web3 import web3.exceptions @@ -217,9 +218,9 @@ def is_valid_signature( ) ).exchange, ).is_valid_hash_signature.call( - bytes.fromhex(remove_0x_prefix(data)), + bytes.fromhex(remove_0x_prefix(HexStr(data))), to_checksum_address(signer_address), - bytes.fromhex(remove_0x_prefix(signature)), + bytes.fromhex(remove_0x_prefix(HexStr(signature))), ) @@ -393,5 +394,5 @@ def sign_hash_to_bytes( '1b117902c86dfb95fe0d1badd983ee166ad259b27acb220174cbb4460d872871137feabdfe76e05924b484789f79af4ee7fa29ec006cedce1bbf369320d034e10b03' """ # noqa: E501 (line too long) return remove_0x_prefix( - sign_hash(web3_or_provider, signer_address, hash_hex) + HexStr(sign_hash(web3_or_provider, signer_address, hash_hex)) ).encode(encoding="utf_8")