UNPKG

witnet-solidity-bridge

Version:

Witnet Solidity Bridge contracts for EVM-compatible chains

895 lines 89.8 kB
{ "_format": "hh-sol-artifact-1", "contractName": "WitnetRequestFactoryDefault", "sourceName": "contracts/core/defaults/WitnetRequestFactoryDefault.sol", "abi": [ { "inputs": [ { "internalType": "contract WitnetOracle", "name": "_witnet", "type": "address" }, { "internalType": "contract WitnetRequestBytecodes", "name": "_registry", "type": "address" }, { "internalType": "bool", "name": "_upgradable", "type": "bool" }, { "internalType": "bytes32", "name": "_versionTag", "type": "bytes32" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [], "name": "NotInitializing", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "type": "error" }, { "inputs": [], "name": "ReentrancyGuardReentrantCall", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "by", "type": "address" }, { "indexed": true, "internalType": "address", "name": "self", "type": "address" }, { "indexed": true, "internalType": "address", "name": "clone", "type": "address" } ], "name": "Cloned", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "version", "type": "uint64" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferStarted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "baseAddr", "type": "address" }, { "indexed": true, "internalType": "bytes32", "name": "baseCodehash", "type": "bytes32" }, { "indexed": false, "internalType": "string", "name": "versionTag", "type": "string" } ], "name": "Upgraded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "request", "type": "address" }, { "indexed": true, "internalType": "bytes32", "name": "radHash", "type": "bytes32" }, { "indexed": false, "internalType": "string[][]", "name": "args", "type": "string[][]" } ], "name": "WitnetRequestBuilt", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "template", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "parameterized", "type": "bool" } ], "name": "WitnetRequestTemplateBuilt", "type": "event" }, { "stateMutability": "nonpayable", "type": "fallback" }, { "inputs": [], "name": "acceptOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "aggregator", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "args", "outputs": [ { "internalType": "string[][]", "name": "", "type": "string[][]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "base", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string[][]", "name": "_args", "type": "string[][]" } ], "name": "buildRequest", "outputs": [ { "internalType": "address", "name": "_request", "type": "address" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32[]", "name": "_retrievals", "type": "bytes32[]" }, { "internalType": "bytes32", "name": "_aggregator", "type": "bytes32" }, { "internalType": "bytes32", "name": "_tally", "type": "bytes32" }, { "internalType": "uint16", "name": "_resultDataMaxSize", "type": "uint16" } ], "name": "buildRequestTemplate", "outputs": [ { "internalType": "address", "name": "_template", "type": "address" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "bytecode", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "class", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "cloned", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "codehash", "outputs": [ { "internalType": "bytes32", "name": "_codehash", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "deployer", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "factory", "outputs": [ { "internalType": "contract WitnetRequestFactory", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getRadonAggregator", "outputs": [ { "components": [ { "internalType": "enum Witnet.RadonReducerOpcodes", "name": "opcode", "type": "uint8" }, { "components": [ { "internalType": "enum Witnet.RadonFilterOpcodes", "name": "opcode", "type": "uint8" }, { "internalType": "bytes", "name": "args", "type": "bytes" } ], "internalType": "struct Witnet.RadonFilter[]", "name": "filters", "type": "tuple[]" } ], "internalType": "struct Witnet.RadonReducer", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_index", "type": "uint256" } ], "name": "getRadonRetrievalByIndex", "outputs": [ { "components": [ { "internalType": "uint8", "name": "argsCount", "type": "uint8" }, { "internalType": "enum Witnet.RadonDataRequestMethods", "name": "method", "type": "uint8" }, { "internalType": "enum Witnet.RadonDataTypes", "name": "resultDataType", "type": "uint8" }, { "internalType": "string", "name": "url", "type": "string" }, { "internalType": "string", "name": "body", "type": "string" }, { "internalType": "string[2][]", "name": "headers", "type": "string[2][]" }, { "internalType": "bytes", "name": "script", "type": "bytes" } ], "internalType": "struct Witnet.RadonRetrieval", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getRadonRetrievalsCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getRadonTally", "outputs": [ { "components": [ { "internalType": "enum Witnet.RadonReducerOpcodes", "name": "opcode", "type": "uint8" }, { "components": [ { "internalType": "enum Witnet.RadonFilterOpcodes", "name": "opcode", "type": "uint8" }, { "internalType": "bytes", "name": "args", "type": "bytes" } ], "internalType": "struct Witnet.RadonFilter[]", "name": "filters", "type": "tuple[]" } ], "internalType": "struct Witnet.RadonReducer", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "_initData", "type": "bytes" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "_radHash", "type": "bytes32" }, { "internalType": "string[][]", "name": "_args", "type": "string[][]" } ], "name": "initializeWitnetRequest", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32[]", "name": "_retrievalsIds", "type": "bytes32[]" }, { "internalType": "bytes32", "name": "_aggregatorId", "type": "bytes32" }, { "internalType": "bytes32", "name": "_tallyId", "type": "bytes32" }, { "internalType": "uint16", "name": "_resultDataMaxSize", "type": "uint16" } ], "name": "initializeWitnetRequestTemplate", "outputs": [ { "internalType": "contract WitnetRequestTemplate", "name": "", "type": "address" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "initialized", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isUpgradable", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_from", "type": "address" } ], "name": "isUpgradableFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "parameterized", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pendingOwner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "proxiableUUID", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "radHash", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "registry", "outputs": [ { "internalType": "contract WitnetRequestBytecodes", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "resultDataMaxSize", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "resultDataType", "outputs": [ { "internalType": "enum Witnet.RadonDataTypes", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "retrievals", "outputs": [ { "internalType": "bytes32[]", "name": "", "type": "bytes32[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "self", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "specs", "outputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tally", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "template", "outputs": [ { "internalType": "contract WitnetRequestTemplate", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string[][]", "name": "_args", "type": "string[][]" } ], "name": "verifyRadonRequest", "outputs": [ { "internalType": "bytes32", "name": "_radHash", "type": "bytes32" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "version", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "witnet", "outputs": [ { "internalType": "contract WitnetOracle", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" } ], "bytecode": "0x6101a060405230608052336101205234801561001a57600080fd5b506040516146dd3803806146dd8339810160408190526100399161023c565b60408051808201909152601a81527f696f2e7769746e65742e72657175657374732e666163746f727900000000000060208201528290829082338061009857604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100a18161015a565b503060a081905290151560e0526001600255610100929092528051602090910120610140526001600160a01b0395861661018052939094166101605250507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd80546001600160a01b031990811683179091557f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc805482169092179091556000805160206146bd8339815191528054909116905550610294565b7ffaf45a8ecd300851b566566df52ca7611b7a56d24a3449b86f4e21c71638e64380546001600160a01b031916905560006101aa6000805160206146bd833981519152546001600160a01b031690565b9050806001600160a01b0316826001600160a01b03161461022057816000805160206146bd83398151915280546001600160a01b0319166001600160a01b03928316179055604051838216918316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35b5050565b6001600160a01b038116811461023957600080fd5b50565b6000806000806080858703121561025257600080fd5b845161025d81610224565b602086015190945061026e81610224565b6040860151909350801515811461028457600080fd5b6060959095015193969295505050565b60805160a05160c05160e051610100516101205161014051610160516101805161429d6104206000396000610342015260008181610459015281816107ee01528181610cda0152818161108801528181611124015281816117df01528181611a4601528181611ddd01528181611e6d01528181611f840152818161201e015281816120ac0152818161235101526129c8015260006103c40152600061053e0152600081816127ce01528181612b140152612c510152600081816103e801526115360152600050506000818161039b015281816104a8015281816105fe015281816107040152818161087b015281816108d6015281816109b601528181610a7201528181610b9401528181610d5e01528181610e1801528181610f9c0152818161103e015281816112190152818161123b015281816112b2015281816113ae01528181611584015281816115f8015281816116c00152818161198401528181611b5b0152818161223b015281816124e8015261274e015260008181611acf01526123f9015261429d6000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c8063715018a61161013b578063b42608da116100b8578063d7e28aab1161007c578063d7e28aab14610560578063db7c58b014610573578063e30c397814610586578063f09400021461058e578063f2fde38b1461059657610248565b8063b42608da14610503578063bf7a0bd314610516578063bff852fa14610529578063c45a015514610531578063d5f394881461053957610248565b80638da5cb5b116100ff5780638da5cb5b14610496578063a04daef01461049e578063a9e954b9146104a6578063adb7c3f7146104cd578063b0a41769146104ee57610248565b8063715018a61461044457806379ba50971461044c5780637b103999146104545780637d18db511461047b5780638ae940e11461048e57610248565b806346d1d21a116101c95780635479d9401161018d5780635479d940146103e657806354fd4d501461040c5780636b58960a146104215780636f2ddd93146104345780637104ddb21461043c57610248565b806346d1d21a1461033d5780634843f06c1461037c5780634e9b75b6146103845780635001f3b51461039957806352d1902d146103bf57610248565b8063265e843911610210578063265e8439146102e557806326f8a6d3146102ed578063341e11c814610302578063410673e514610322578063439fab911461032a57610248565b806309e502491461027a57806310d02e471461029a578063158ef93e146102af5780631eef9052146102c7578063245a7bfc146102dd575b6102786040518060400160405280600f81526020016e1b9bdd081a5b5c1b195b595b9d1959608a1b8152506105a9565b005b6102826105f2565b60405161ffff90911681526020015b60405180910390f35b6102a26106e5565b6040516102919190613167565b6102b761083e565b6040519015158152602001610291565b6102cf61086f565b604051908152602001610291565b6102cf6108ca565b6102cf6109aa565b6102f5610a66565b6040516102919190613222565b610315610310366004613230565b610b49565b60405161029191906132df565b6102cf610d52565b610278610338366004613486565b610e0e565b6103647f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610291565b6102b76112a6565b61038c6113a2565b6040516102919190613572565b7f0000000000000000000000000000000000000000000000000000000000000000610364565b6102cf7f000000000000000000000000000000000000000000000000000000000000000081565b7f00000000000000000000000000000000000000000000000000000000000000006102b7565b61041461150e565b6040516102919190613585565b6102b761042f3660046135ad565b611518565b610364611578565b6103646115dc565b610278611622565b610278611636565b6103647f000000000000000000000000000000000000000000000000000000000000000081565b6103646104893660046136fe565b6116b4565b6102a2611965565b610364611a7d565b6102b7611a9e565b7f00000000000000000000000000000000000000000000000000000000000000003f6102cf565b6104d5611ac2565b6040516001600160e01b03199091168152602001610291565b6104f6611b4f565b604051610291919061376e565b61036461051136600461379c565b611c7f565b6102cf6105243660046136fe565b61222f565b6104146123ec565b6103646124dc565b6103647f000000000000000000000000000000000000000000000000000000000000000081565b61036461056e366004613835565b6125d7565b61036461058136600461387b565b61271f565b6103646129a0565b6104146129c4565b6102786105a43660046135ad565b612a64565b6105b16123ec565b816040516020016105c392919061392d565b60408051601f198184030181529082905262461bcd60e51b82526105e991600401613585565b60405180910390fd5b60006001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361063c5760405162461bcd60e51b81526004016105e99061396a565b6000610646612ae9565b600201546001600160a01b0316905080156106c357806001600160a01b03166309e502496040518163ffffffff1660e01b8152600401602060405180830381865afa158015610699573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106bd91906139b3565b91505090565b505060008051602061422883398151915254610100900461ffff1690565b5090565b6040805180820190915260008152606060208201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036107425760405162461bcd60e51b81526004016105e99061396a565b600061074c612ae9565b600201546001600160a01b0316905080156107c757806001600160a01b03166310d02e476040518163ffffffff1660e01b8152600401600060405180830381865afa15801561079f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106bd9190810190613a15565b60008051602061420883398151915254604051630d9e7e1960e21b815260048101919091527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633679f864906024015b600060405180830381865afa15801561079f573d6000803e3d6000fd5b6000805160206141c88339815191525460009015158061086a57506000610863612ae9565b6001015414155b905090565b60006001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036108b95760405162461bcd60e51b81526004016105e99061396a565b6108c1612ae9565b60010154905090565b60006001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036109145760405162461bcd60e51b81526004016105e99061396a565b600061091e612ae9565b600201546001600160a01b03169050801561099557806001600160a01b031663245a7bfc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610971573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106bd9190613b56565b50506000805160206142088339815191525490565b60006001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036109f45760405162461bcd60e51b81526004016105e99061396a565b60006109fe612ae9565b600201546001600160a01b031690508015610a5157806001600160a01b031663265e84396040518163ffffffff1660e01b8152600401602060405180830381865afa158015610971573d6000803e3d6000fd5b50506000805160206141a88339815191525490565b60006001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610ab05760405162461bcd60e51b81526004016105e99061396a565b6000610aba612ae9565b600201546001600160a01b031690508015610b3157806001600160a01b03166326f8a6d36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b0d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106bd9190613b7e565b50506000805160206142288339815191525460ff1690565b610b8a6040805160e0810190915260008082526020820190815260200160008152602001606081526020016060815260200160608152602001606081525090565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610bd25760405162461bcd60e51b81526004016105e99061396a565b6000610bdc612ae9565b600201546001600160a01b031690508015610c6657604051630683c23960e31b8152600481018490526001600160a01b0382169063341e11c8906024015b600060405180830381865afa158015610c37573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c5f9190810190613c97565b9392505050565b6000805160206141a8833981519152548310610cd05760405162461bcd60e51b815260206004820152602360248201527f5769746e65745265717565737454656d706c6174653a206f7574206f662072616044820152626e676560e81b60648201526084016105e9565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016639dd487576000805160206142088339815191526003018581548110610d2257610d22613da2565b90600052602060002001546040518263ffffffff1660e01b8152600401610c1a91815260200190565b505b919050565b60006001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610d9c5760405162461bcd60e51b81526004016105e99061396a565b6000610da6612ae9565b600201546001600160a01b031690508015610df957806001600160a01b031663410673e56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610971573d6000803e3d6000fd5b50506000805160206141c88339815191525490565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610e565760405162461bcd60e51b81526004016105e99061396a565b600080516020614248833981519152546001600160a01b031680610eb75781806020019051810190610e889190613db8565b60008051602061424883398151915280546001600160a01b0319166001600160a01b0383161790559050610f1b565b336001600160a01b03821614610f1b5760405162461bcd60e51b815260206004820152602360248201527f5769746e657452657175657374466163746f72793a206e6f7420746865206f776044820152623732b960e91b60648201526084016105e9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd546001600160a01b0316610f7c577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd80546001600160a01b031916301790555b6000805160206141e8833981519152546001600160a01b03161561103c577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166000805160206141e8833981519152546001600160a01b03160361103c5760405162461bcd60e51b815260206004820152602960248201527f5769746e657452657175657374466163746f72793a20616c726561647920696e6044820152681a5d1a585b1a5e995960ba1b60648201526084016105e9565b7f00000000000000000000000000000000000000000000000000000000000000006000805160206141e883398151915280546001600160a01b0319166001600160a01b039283161790557f0000000000000000000000000000000000000000000000000000000000000000163b6111105760405162461bcd60e51b815260206004820152603260248201527f5769746e657452657175657374466163746f72793a20696e6578697374656e7460448201527120726571756573747320726567697374727960701b60648201526084016105e9565b636f1735ab60e01b6001600160e01b0319167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663adb7c3f76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611180573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a49190613dd5565b6001600160e01b031916146112175760405162461bcd60e51b815260206004820152603360248201527f5769746e657452657175657374466163746f72793a20756e636f6d706c69616e6044820152727420726571756573747320726567697374727960681b60648201526084016105e9565b7f00000000000000000000000000000000000000000000000000000000000000003f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316337fe73e754121f0bad1327816970101955bfffdf53d270ac509d777c25be070d7f661128d61150e565b60405161129a9190613585565b60405180910390a45050565b60006001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036112f05760405162461bcd60e51b81526004016105e99061396a565b60006112fa612ae9565b600201546001600160a01b03169050801561137157806001600160a01b0316634843f06c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561134d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106bd9190613dff565b50507f50402db987be01ecf619cd3fb022cf52f861d188e7b779dd032a62d082276afc54600160a01b900460ff1690565b60606001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036113ec5760405162461bcd60e51b81526004016105e99061396a565b6113f4612ae9565b80546040805160208084028201810190925282815292919060009084015b8282101561150557838290600052602060002001805480602002602001604051908101604052809291908181526020016000905b828210156114f257838290600052602060002001805461146590613e21565b80601f016020809104026020016040519081016040528092919081815260200182805461149190613e21565b80156114de5780601f106114b3576101008083540402835291602001916114de565b820191906000526020600020905b8154815290600101906020018083116114c157829003601f168201915b505050505081526020019060010190611446565b5050505081526020019060010190611412565b50505050905090565b606061086a612b0d565b600080516020614248833981519152546000906001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000008015610c5f5750826001600160a01b0316816001600160a01b0316149392505050565b60006001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036115c25760405162461bcd60e51b81526004016105e99061396a565b6115ca612ae9565b600201546001600160a01b0316905090565b6000806115e7612b38565b6001600160a01b03160361161a57507f000000000000000000000000000000000000000000000000000000000000000090565b61086a612b4e565b61162a612b64565b6116346000612b96565b565b33806116406129a0565b6001600160a01b0316146116a85760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016105e9565b6116b181612b96565b50565b60006001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036116fe5760405162461bcd60e51b81526004016105e99061396a565b6000611708612ae9565b600201546001600160a01b03161461179c57611722612ae9565b60020154604051637d18db5160e01b81526001600160a01b0390911690637d18db5190611753908590600401613572565b6020604051808303816000875af1158015611772573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117969190613db8565b92915050565b60008051602061420883398151915280546000805160206141c8833981519152546000805160206142288339815191525460405163a4a7cecd60e01b81526000937f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169363a4a7cecd93611838936000805160206141a8833981519152939291610100900461ffff16908b90600401613e55565b6020604051808303816000875af1158015611857573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187b9190613b56565b9050600061188882612c49565b90945090506001600160a01b0384163b60000361191b576118a881612cf4565b6001600160a01b031663d7e28aab83876040518363ffffffff1660e01b81526004016118d5929190613ecf565b6020604051808303816000875af11580156118f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119189190613db8565b93505b81846001600160a01b03167f410c7975f3418de1a871bdcb16ea6c438f6a6c1e5799e704d4e32f53a405f229876040516119559190613572565b60405180910390a3505050919050565b6040805180820190915260008152606060208201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036119c25760405162461bcd60e51b81526004016105e99061396a565b60006119cc612ae9565b600201546001600160a01b031690508015611a1f57806001600160a01b0316638ae940e16040518163ffffffff1660e01b8152600401600060405180830381865afa15801561079f573d6000803e3d6000fd5b6000805160206141c883398151915254604051630d9e7e1960e21b815260048101919091527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633679f86490602401610821565b60006000805160206142488339815191525b546001600160a01b0316919050565b6000611aa86115dc565b6001600160a01b0316306001600160a01b03161415905090565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611b135750611afe612b38565b6001600160a01b0316306001600160a01b0316145b15611b245750630db7c58b60e41b90565b6000611b2e612ae9565b6001015414611b43575063cfcd387560e01b90565b506308f28adb60e31b90565b60606001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003611b995760405162461bcd60e51b81526004016105e99061396a565b6000611ba3612ae9565b600201546001600160a01b031690508015611c1e57806001600160a01b031663b0a417696040518163ffffffff1660e01b8152600401600060405180830381865afa158015611bf6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106bd9190810190613ee8565b6000805160206141a8833981519152805460408051602080840282018101909252828152929190830182828015611c7457602002820191906000526020600020905b815481526020019060010190808311611c60575b505050505091505090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460009190600160401b810460ff1615906001600160401b03168381158015611cc75750825b90506000826001600160401b03166001148015611ce35750303b155b905081158015611cf1575080155b15611d0f5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315611d3957845460ff60401b1916600160401b1785555b60008a611d965760405162461bcd60e51b815260206004820152602560248201527f5769746e65745265717565737454656d706c6174653a206e6f2072657472696560448201526476616c733f60d81b60648201526084016105e9565b6000805b8c8110156120075760008e8e83818110611db657611db6613da2565b90506020020135905081600003611e5757604051635072a99b60e11b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a0e5533690602401602060405180830381865afa158015611e2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e509190613b7e565b9350611f66565b604051635072a99b60e11b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a0e5533690602401602060405180830381865afa158015611ebc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee09190613b7e565b6013811115611ef157611ef1613101565b846013811115611f0357611f03613101565b14611f665760405162461bcd60e51b815260206004820152602d60248201527f5769746e65745265717565737454656d706c6174653a206d69736d617463686960448201526c6e672072657472696576616c7360981b60648201526084016105e9565b82611ffe5760405163b4ab01a560e01b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b4ab01a590602401602060405180830381865afa158015611fd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ff79190613f78565b60ff161192505b50600101611d9a565b50604051630d9e7e1960e21b8152600481018c90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633679f86490602401600060405180830381865afa15801561206d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120959190810190613a15565b50604051630d9e7e1960e21b8152600481018b90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633679f86490602401600060405180830381865afa1580156120fb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526121239190810190613a15565b506000805160206142088339815191528b81557f50402db987be01ecf619cd3fb022cf52f861d188e7b779dd032a62d082276afc80546001600160a81b0319163360ff60a01b191617600160a01b84151502179055600080516020614228833981519152805484919060ff191660018360138111156121a4576121a4613101565b021790555060048101805462ffff00191661010061ffff8d16021790556121cf600382018f8f612f68565b506002018a90555030965050831561222157845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505095945050505050565b60006001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036122795760405162461bcd60e51b81526004016105e99061396a565b6000612283612ae9565b600201546001600160a01b0316146123115761229d612ae9565b6002015460405163bf7a0bd360e01b81526001600160a01b039091169063bf7a0bd3906122ce908590600401613572565b6020604051808303816000875af11580156122ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117969190613b56565b60008051602061420883398151915280546000805160206141c8833981519152546000805160206142288339815191525460405163a4a7cecd60e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169363a4a7cecd936123a9936000805160206141a88339815191529361010090910461ffff16908a90600401613e55565b6020604051808303816000875af11580156123c8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5f9190613b56565b6060306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061243d5750612428612b38565b6001600160a01b0316306001600160a01b0316145b1561247157506040805180820190915260148152735769746e657452657175657374466163746f727960601b602082015290565b600061247b612ae9565b60010154146124ac575060408051808201909152600d81526c15da5d1b995d14995c5d595cdd609a1b602082015290565b506040805180820190915260158152745769746e65745265717565737454656d706c61746560581b602082015290565b60006001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036125265760405162461bcd60e51b81526004016105e99061396a565b6000612530612ae9565b600201546001600160a01b0316905080156125a757806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612583573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106bd9190613db8565b50507f50402db987be01ecf619cd3fb022cf52f861d188e7b779dd032a62d082276afc546001600160a01b031690565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460009190600160401b810460ff1615906001600160401b0316838115801561261f5750825b90506000826001600160401b0316600114801561263b5750303b155b905081158015612649575080155b156126675760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561269157845460ff60401b1916600160401b1785555b600061269b612ae9565b88519091506126b090829060208b0190612faf565b506001810189905560020180546001600160a01b03191633179055309550831561271457845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505092915050565b6000612729612b38565b6001600160a01b0316306001600160a01b031614806127705750306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b6127ca5760405162461bcd60e51b815260206004820152602560248201527f5769746e657452657175657374466163746f72793a206e6f742074686520666160448201526463746f727960d81b60648201526084016105e9565b60007f000000000000000000000000000000000000000000000000000000000000000086868686604051602001612805959493929190613f93565b60405160208183030381529060405280519060200120905060ff60f81b308261282c612db7565b80516020918201206040516128449594939201613ff7565b6040516020818303038152906040528051906020012060001c9150816001600160a01b03163b6000036128f15761287a81612cf4565b6001600160a01b031663b42608da878787876040518563ffffffff1660e01b81526004016128ab9493929190614030565b6020604051808303816000875af11580156128ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ee9190613db8565b91505b7fa62c4b81238a0a302883bd74617034f93d86fe817895c2dfef53073876dae76782836001600160a01b0316634843f06c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612951573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129759190613dff565b604080516001600160a01b03909316835290151560208301520160405180910390a150949350505050565b60006000805160206142488339815191525b600101546001600160a01b0316919050565b60607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632ebf5d5c6129fd612ae9565b600101546040518263ffffffff1660e01b8152600401612a1f91815260200190565b600060405180830381865afa158015612a3c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261086a9190810190614063565b612a6c612b64565b7ffaf45a8ecd300851b566566df52ca7611b7a56d24a3449b86f4e21c71638e64380546001600160a01b0319166001600160a01b038316908117909155612ab1611a7d565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b7fbf9e297db5f64cdb81cd821e7ad085f56008e0c6100f4ebf5e41ef664932203490565b606061086a7f0000000000000000000000000000000000000000000000000000000000000000612e32565b60006000805160206141e88339815191526129b2565b60006000805160206141e8833981519152611a8f565b33612b6d611a7d565b6001600160a01b0316146116345760405163118cdaa760e01b81523360048201526024016105e9565b7ffaf45a8ecd300851b566566df52ca7611b7a56d24a3449b86f4e21c71638e64380546001600160a01b03191690556000612bcf611a7d565b9050806001600160a01b0316826001600160a01b031614612c45578160008051602061424883398151915280546001600160a01b0319166001600160a01b03928316179055604051838216918316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35b5050565b6000806000837f0000000000000000000000000000000000000000000000000000000000000000604051602001612c949291909182526001600160e01b031916602082015260240190565b60405160208183030381529060405280519060200120905060ff60f81b3082612cbb612db7565b8051602091820120604051612cd39594939201613ff7565b60408051601f19818403018152919052805160209091012094909350915050565b600080612cff612edd565b9050826037826000f591506001600160a01b038216612d605760405162461bcd60e51b815260206004820152601860248201527f436c6f6e61626c653a2043524541544532206661696c6564000000000000000060448201526064016105e9565b816001600160a01b0316612d726115dc565b6001600160a01b0316336001600160a01b03167ff376596be5039d6b2fb36fead4c8a370eae426e790a869be8db074ab608cc24860405160405180910390a450919050565b6060612dc16115dc565b60601b604051602001612e1e9190733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81526bffffffffffffffffffffffff199190911660148201526e5af43d82803e903d91602b57fd5bf360881b602882015260370190565b604051602081830303815290604052905090565b60606000612e3f83612f2f565b6001600160401b03811115612e5657612e56613391565b6040519080825280601f01601f191660200182016040528015612e80576020820181803683370190505b50905060005b8151811015612ed657838160208110612ea157612ea1613da2565b1a60f81b828281518110612eb757612eb7613da2565b60200101906001600160f81b031916908160001a905350600101612e86565b5092915050565b60606000612ee96115dc565b90506040519150733d602d80600a3d3981f3363d3d373d3d3d363d7360601b82528060601b60148301526e5af43d82803e903d91602b57fd5bf360881b60288301525090565b60005b6020811015610d4d57818160208110612f4d57612f4d613da2565b1a60f81b6001600160f81b03191615610d4d57600101612f32565b828054828255906000526020600020908101928215612fa3579160200282015b82811115612fa3578235825591602001919060010190612f88565b506106e1929150613008565b828054828255906000526020600020908101928215612ffc579160200282015b82811115612ffc5782518051612fec91849160209091019061301d565b5091602001919060010190612fcf565b506106e192915061306f565b5b808211156106e15760008155600101613009565b828054828255906000526020600020908101928215613063579160200282015b82811115613063578251829061305390826140e8565b509160200191906001019061303d565b506106e192915061308c565b808211156106e157600061308382826130a9565b5060010161306f565b808211156106e15760006130a082826130c7565b5060010161308c565b50805460008255906000526020600020908101906116b1919061308c565b5080546130d390613e21565b6000825580601f106130e3575050565b601f0160209004906000526020600020908101906116b19190613008565b634e487b7160e01b600052602160045260246000fd5b60005b8381101561313257818101518382015260200161311a565b50506000910152565b60008151808452613153816020860160208601613117565b601f01601f19169290920160200192915050565b60006020808352606083018451600c811061318457613184613101565b828501528482015160408086018190528151928390526080600584901b8701810193928501929087019060005b8181101561320057888603607f1901835284518051600a81106131d6576131d6613101565b87528701518787018590526131ed8588018261313b565b96505093860193918601916001016131b1565b509398975050505050505050565b6014811061321e5761321e613101565b9052565b60208101611796828461320e565b60006020828403121561324257600080fd5b5035919050565b6005811061321e5761321e613101565b600082825180855260208086019550808260051b8401018186016000805b858110156132d157868403601f19018a5282518460408101845b60028110156132bc5787820383526132aa82855161313b565b93890193928901929150600101613291565b509b87019b9550505091840191600101613277565b509198975050505050505050565b6020815260ff8251166020820152600060208301516133016040840182613249565b506040830151613314606084018261320e565b50606083015160e0608084015261332f61010084018261313b565b90506080840151601f19808584030160a086015261334d838361313b565b925060a08601519150808584030160c086015261336a8383613259565b925060c08601519150808584030160e086015250613388828261313b565b95945050505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156133c9576133c9613391565b60405290565b60405160e081016001600160401b03811182821017156133c9576133c9613391565b604051601f8201601f191681016001600160401b038111828210171561341957613419613391565b604052919050565b60006001600160401b0382111561343a5761343a613391565b50601f01601f191660200190565b600061345b61345684613421565b6133f1565b905082815283838301111561346f57600080fd5b828260208301376000602084830101529392505050565b60006020828403121561349857600080fd5b81356001600160401b038111156134ae57600080fd5b8201601f810184136134bf57600080fd5b6134ce84823560208401613448565b949350505050565b6000828251808552602080860195506005818360051b8501018287016000805b8681101561356357601f1988850381018c5283518051808752908801908887019080891b88018a01865b8281101561354c57858a830301845261353a82865161313b565b948c0194938c01939150600101613520565b509e8a019e975050509387019350506001016134f6565b50919998505050505050505050565b602081526000610c5f60208301846134d6565b602081526000610c5f602083018461313b565b6001600160a01b03811681146116b157600080fd5b6000602082840312156135bf57600080fd5b8135610c5f81613598565b60006001600160401b038211156135e3576135e3613391565b5060051b60200190565b600082601f8301126135fe57600080fd5b8135602061360e613456836135ca565b82815260059290921b8401810191818101908684111561362d57600080fd5b8286015b848110156136f35780356001600160401b038082111561365057600080fd5b818901915089603f83011261366457600080fd5b85820135613674613456826135ca565b81815260059190911b830160400190878101908c83111561369457600080fd5b604085015b838110156136e1578035858111156136b057600080fd5b8601605f81018f136136c157600080fd5b6136d38f604083013560608401613448565b845250918901918901613699565b50875250505092840192508301613631565b509695505050505050565b60006020828403121561371057600080fd5b81356001600160401b0381111561372657600080fd5b6134ce848285016135ed565b60008151808452602080850194506020840160005b8381101561376357815187529582019590820190600101613747565b509495945050505050565b602081526000610c5f6020830184613732565b61ffff811681146116b157600080fd5b8035610d4d81613781565b6000806000806000608086880312156137b457600080fd5b85356001600160401b03808211156137cb57600080fd5b818801915088601f8301126137df57600