608060405234801561001057600080fd5b50604051611b06380380611b0683398101604081905261002f916100c6565b6100388161003e565b506100f6565b7f4a2e063d7927ca38537b0341d79ba5f6ec64f53c703a2b83451e20c0465d06138054604080516001600160a01b039283168152918416602083015280517f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f9281900390910190a180546001600160a01b0319166001600160a01b0392909216919091179055565b6000602082840312156100d857600080fd5b81516001600160a01b03811681146100ef57600080fd5b9392505050565b611a01806101056000396000f3fe6080604052600436106100a05760003560e01c80636b86400e116100645780636b86400e1461018957806372a36817146101ab5780638f283970146101cb578063a520a38a146101eb578063ac9650d814610223578063c511f8fb14610250576100af565b806301ffc9a7146100b75780631ab6b705146100ec5780632be9b20e1461010c5780634cb5d8fd1461013c5780635c573f2e1461015c576100af565b366100af576100ad610270565b005b6100ad610270565b3480156100c357600080fd5b506100d76100d2366004611216565b610282565b60405190151581526020015b60405180910390f35b3480156100f857600080fd5b506100ad6101073660046112b8565b610361565b34801561011857600080fd5b5061012e6000805160206119ac83398151915281565b6040519081526020016100e3565b34801561014857600080fd5b506100ad6101573660046112b8565b6103af565b34801561016857600080fd5b5061017c610177366004611398565b6103f0565b6040516100e391906113b3565b34801561019557600080fd5b5061019e6104fe565b6040516100e39190611451565b3480156101b757600080fd5b506100ad6101c63660046114e7565b6106dc565b3480156101d757600080fd5b506100ad6101e6366004611398565b610725565b3480156101f757600080fd5b5061020b610206366004611216565b610766565b6040516001600160a01b0390911681526020016100e3565b34801561022f57600080fd5b5061024361023e36600461156a565b610777565b6040516100e391906115df565b34801561025c57600080fd5b5061020b61026b366004611216565b61086c565b61028061027b6108b3565b6108cf565b565b60006001600160e01b0319821663b651db4560e01b14806102b357506301ffc9a760e01b6001600160e01b03198316145b156102c057506001919050565b60006102ca6108b3565b90506001600160a01b03811615610352576040516301ffc9a760e01b81526001600160e01b0319841660048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa158015610329573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034d9190611641565b610355565b60005b9392505050565b919050565b6000805160206119ac83398151915280546001600160a01b031633146103a25760405162461bcd60e51b815260040161039990611663565b60405180910390fd5b6103ab826108f8565b5050565b6000805160206119ac83398151915280546001600160a01b031633146103e75760405162461bcd60e51b815260040161039990611663565b6103ab82610ade565b6001600160a01b03811660009081527f4a2e063d7927ca38537b0341d79ba5f6ec64f53c703a2b83451e20c0465d0616602052604081206060916000805160206119ac8339815191529161044390610cdf565b90508067ffffffffffffffff81111561045e5761045e611231565b604051908082528060200260200182016040528015610487578160200160208202803683370190505b50925060005b818110156104f6576001600160a01b038516600090815260038401602052604090206104b99082610ce9565b8482815181106104cb576104cb61169a565b6001600160e01b0319909216602092830291909101909101526104ef6001826116c6565b905061048d565b505050919050565b60606000805160206119ac8339815191527f4a2e063d7927ca38537b0341d79ba5f6ec64f53c703a2b83451e20c0465d0614600061053b82610cdf565b90508067ffffffffffffffff81111561055657610556611231565b6040519080825280602002602001820160405280156105a657816020015b604080516060808201835260008083526020830191909152918101919091528152602001906001900390816105745790505b50935060005b818110156106d5576004840160006105c48584610ce9565b6001600160e01b031990811682526020808301939093526040918201600020825160608101909352805460e01b9091168252600181018054929391929184019161060d906116d9565b80601f0160208091040260200160405190810160405280929190818152602001828054610639906116d9565b80156106865780601f1061065b57610100808354040283529160200191610686565b820191906000526020600020905b81548152906001019060200180831161066957829003601f168201915b5050509183525050600291909101546001600160a01b031660209091015285518690839081106106b8576106b861169a565b60209081029190910101526106ce6001826116c6565b90506105ac565b5050505090565b6000805160206119ac83398151915280546001600160a01b031633146107145760405162461bcd60e51b815260040161039990611663565b61071f848484610cf5565b50505050565b6000805160206119ac83398151915280546001600160a01b0316331461075d5760405162461bcd60e51b815260040161039990611663565b6103ab82610e66565b60006107718261086c565b92915050565b60608167ffffffffffffffff81111561079257610792611231565b6040519080825280602002602001820160405280156107c557816020015b60608152602001906001900390816107b05790505b50905060005b8281101561086557610835308585848181106107e9576107e961169a565b90506020028101906107fb9190611713565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610edc92505050565b8282815181106108475761084761169a565b6020026020010181905250808061085d90611761565b9150506107cb565b5092915050565b6001600160e01b03191660009081527f4a2e063d7927ca38537b0341d79ba5f6ec64f53c703a2b83451e20c0465d061760205260409020600201546001600160a01b031690565b60006108ca6000356001600160e01b03191661086c565b905090565b3660008037600080366000845af43d6000803e8080156108ee573d6000f35b3d6000fd5b505050565b80516000805160206119ac8339815191529061093f907f4a2e063d7927ca38537b0341d79ba5f6ec64f53c703a2b83451e20c0465d0614906001600160e01b031916610f01565b6109975760405162461bcd60e51b815260206004820152602360248201527f526f757465723a20706c7567696e2065786973747320666f722066756e63746960448201526237b71760e91b6064820152608401610399565b6020808301516040516109aa920161177a565b604051602081830303815290604052805190602001206001600160e01b03191682600001516001600160e01b031916146109f65760405162461bcd60e51b815260040161039990611796565b81516001600160e01b031916600090815260048201602090815260409091208351815463ffffffff191660e09190911c178155908301518391906001820190610a3f908261182f565b5060409182015160029190910180546001600160a01b0319166001600160a01b0392831617905583518483015190911660009081526003840160205291909120610a92916001600160e01b031916610f01565b50604080830151835191516001600160a01b03909116916001600160e01b031916907fe0e70d6cf2eef8321d38ecb6a3a5a107eaaf5e5f8b1976b462146a34e28f7dc290600090a35050565b6000610aed8260000151610766565b90506001600160a01b038116610b155760405162461bcd60e51b8152600401610399906118ef565b602080830151604051610b28920161177a565b604051602081830303815290604052805190602001206001600160e01b03191682600001516001600160e01b03191614610b745760405162461bcd60e51b815260040161039990611796565b81516000805160206119ac83398151915290610bbb907f4a2e063d7927ca38537b0341d79ba5f6ec64f53c703a2b83451e20c0465d0614906001600160e01b031916610f01565b5082516001600160e01b031916600090815260048201602090815260409091208451815463ffffffff191660e09190911c178155908401518491906001820190610c05908261182f565b5060409182015160029190910180546001600160a01b0319166001600160a01b03928316179055845190841660009081526003840160205291909120610c54916001600160e01b031916610f0d565b5082516040808501516001600160a01b031660009081526003840160205220610c86916001600160e01b031916610f01565b5082604001516001600160a01b0316826001600160a01b031684600001516001600160e01b0319167fcc8adca15b14349a258731182baaa1a066ed6e039d88e217beefdd9d400bb20560405160405180910390a4505050565b6000610771825490565b60006103558383610f19565b6000805160206119ac8339815191526000610d0f8561086c565b90506001600160a01b038116610d375760405162461bcd60e51b8152600401610399906118ef565b8383604051602001610d4a929190611938565b604051602081830303815290604052805190602001206001600160e01b031916856001600160e01b03191614610d925760405162461bcd60e51b815260040161039990611796565b6001600160e01b0319851660009081526004830160205260408120805463ffffffff1916815590610dc660018301826111a8565b5060020180546001600160a01b0319169055610def600183016001600160e01b03198716610f0d565b506001600160a01b03811660009081526003830160205260409020610e1e906001600160e01b03198716610f0d565b506040516001600160a01b038216906001600160e01b03198716907f35abc8f71d3b64d5ac2bf726bfcc6c2c4311e2882a30b10d56536b6747f310c490600090a35050505050565b6000805160206119ac8339815191528054604080516001600160a01b039283168152918416602083015280517f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f9281900390910190a180546001600160a01b0319166001600160a01b0392909216919091179055565b6060610355838360405180606001604052806027815260200161198560279139610f43565b60006103558383610fbb565b6000610355838361100a565b6000826000018281548110610f3057610f3061169a565b9060005260206000200154905092915050565b6060600080856001600160a01b031685604051610f60919061177a565b600060405180830381855af49150503d8060008114610f9b576040519150601f19603f3d011682016040523d82523d6000602084013e610fa0565b606091505b5091509150610fb1868383876110fd565b9695505050505050565b600081815260018301602052604081205461100257508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610771565b506000610771565b600081815260018301602052604081205480156110f357600061102e600183611948565b855490915060009061104290600190611948565b90508181146110a75760008660000182815481106110625761106261169a565b90600052602060002001549050808760000184815481106110855761108561169a565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806110b8576110b861195b565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610771565b6000915050610771565b6060831561116c578251600003611165576001600160a01b0385163b6111655760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610399565b5081611176565b611176838361117e565b949350505050565b81511561118e5781518083602001fd5b8060405162461bcd60e51b81526004016103999190611971565b5080546111b4906116d9565b6000825580601f106111c4575050565b601f0160209004906000526020600020908101906111e291906111e5565b50565b5b808211156111fa57600081556001016111e6565b5090565b80356001600160e01b03198116811461035c57600080fd5b60006020828403121561122857600080fd5b610355826111fe565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561126a5761126a611231565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561129957611299611231565b604052919050565b80356001600160a01b038116811461035c57600080fd5b600060208083850312156112cb57600080fd5b823567ffffffffffffffff808211156112e357600080fd5b90840190606082870312156112f757600080fd5b6112ff611247565b611308836111fe565b8152838301358281111561131b57600080fd5b8301601f8101881361132c57600080fd5b80358381111561133e5761133e611231565b611350601f8201601f19168701611270565b9350808452888682840101111561136657600080fd5b8086830187860137600086828601015250508184820152611389604084016112a1565b60408201529695505050505050565b6000602082840312156113aa57600080fd5b610355826112a1565b6020808252825182820181905260009190848201906040850190845b818110156113f55783516001600160e01b031916835292840192918401916001016113cf565b50909695505050505050565b60005b8381101561141c578181015183820152602001611404565b50506000910152565b6000815180845261143d816020860160208601611401565b601f01601f19169290920160200192915050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b838110156114d957888303603f19018552815180516001600160e01b0319168452878101516060898601819052906114b282870182611425565b928901516001600160a01b0316958901959095525094870194925090860190600101611478565b509098975050505050505050565b6000806000604084860312156114fc57600080fd5b611505846111fe565b9250602084013567ffffffffffffffff8082111561152257600080fd5b818601915086601f83011261153657600080fd5b81358181111561154557600080fd5b87602082850101111561155757600080fd5b6020830194508093505050509250925092565b6000806020838503121561157d57600080fd5b823567ffffffffffffffff8082111561159557600080fd5b818501915085601f8301126115a957600080fd5b8135818111156115b857600080fd5b8660208260051b85010111156115cd57600080fd5b60209290920196919550909350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561163457603f19888603018452611622858351611425565b94509285019290850190600101611606565b5092979650505050505050565b60006020828403121561165357600080fd5b8151801515811461035557600080fd5b60208082526017908201527f526f757465723a204e6f7420617574686f72697a65642e000000000000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610771576107716116b0565b600181811c908216806116ed57607f821691505b60208210810361170d57634e487b7160e01b600052602260045260246000fd5b50919050565b6000808335601e1984360301811261172a57600080fd5b83018035915067ffffffffffffffff82111561174557600080fd5b60200191503681900382131561175a57600080fd5b9250929050565b600060018201611773576117736116b0565b5060010190565b6000825161178c818460208701611401565b9190910192915050565b6020808252602b908201527f526f757465723a20666e2073656c6563746f7220616e64207369676e6174757260408201526a329036b4b9b6b0ba31b41760a91b606082015260800190565b601f8211156108f357600081815260208120601f850160051c810160208610156118085750805b601f850160051c820191505b8181101561182757828155600101611814565b505050505050565b815167ffffffffffffffff81111561184957611849611231565b61185d8161185784546116d9565b846117e1565b602080601f831160018114611892576000841561187a5750858301515b600019600386901b1c1916600185901b178555611827565b600085815260208120601f198616915b828110156118c1578886015182559484019460019091019084016118a2565b50858210156118df5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208082526029908201527f526f757465723a204e6f20706c7567696e20617661696c61626c6520666f722060408201526839b2b632b1ba37b91760b91b606082015260800190565b8183823760009101908152919050565b81810381811115610771576107716116b0565b634e487b7160e01b600052603160045260246000fd5b602081526000610355602083018461142556fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65644a2e063d7927ca38537b0341d79ba5f6ec64f53c703a2b83451e20c0465d0613a264697066735822122035fb2b029a25a6dd485938afa34082443751a790c559cc62bcc8c4559336a73f64736f6c63430008120033000000000000000000000000274d4461cd6e0f5cdbe5e422175c06da3b1c1d19