60806040523480156200001157600080fd5b506040518060400160405280600a81526020017f555344432d546f6b656e000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f245553444300000000000000000000000000000000000000000000000000000081525081600390816200008f91906200059d565b508060049081620000a191906200059d565b505050620000c4620000b8620000de60201b60201c565b620000e660201b60201c565b620000d8336103e8620001ac60201b60201c565b6200079f565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200021e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200021590620006e5565b60405180910390fd5b62000232600083836200031960201b60201c565b806002600082825462000246919062000736565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620002f9919062000782565b60405180910390a362000315600083836200031e60201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620003a557607f821691505b602082108103620003bb57620003ba6200035d565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004257fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620003e6565b620004318683620003e6565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200047e62000478620004728462000449565b62000453565b62000449565b9050919050565b6000819050919050565b6200049a836200045d565b620004b2620004a98262000485565b848454620003f3565b825550505050565b600090565b620004c9620004ba565b620004d68184846200048f565b505050565b5b81811015620004fe57620004f2600082620004bf565b600181019050620004dc565b5050565b601f8211156200054d576200051781620003c1565b6200052284620003d6565b8101602085101562000532578190505b6200054a6200054185620003d6565b830182620004db565b50505b505050565b600082821c905092915050565b6000620005726000198460080262000552565b1980831691505092915050565b60006200058d83836200055f565b9150826002028217905092915050565b620005a88262000323565b67ffffffffffffffff811115620005c457620005c36200032e565b5b620005d082546200038c565b620005dd82828562000502565b600060209050601f83116001811462000615576000841562000600578287015190505b6200060c85826200057f565b8655506200067c565b601f1984166200062586620003c1565b60005b828110156200064f5784890151825560018201915060208501945060208101905062000628565b868310156200066f57848901516200066b601f8916826200055f565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620006cd601f8362000684565b9150620006da8262000695565b602082019050919050565b600060208201905081810360008301526200070081620006be565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620007438262000449565b9150620007508362000449565b92508282019050808211156200076b576200076a62000707565b5b92915050565b6200077c8162000449565b82525050565b600060208201905062000799600083018462000771565b92915050565b6117dc80620007af6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806370a0823111610097578063a457c2d711610066578063a457c2d714610276578063a9059cbb146102a6578063dd62ed3e146102d6578063f2fde38b14610306576100f5565b806370a0823114610200578063715018a6146102305780638da5cb5b1461023a57806395d89b4114610258576100f5565b806323b872dd116100d357806323b872dd14610166578063313ce5671461019657806339509351146101b457806340c10f19146101e4576100f5565b806306fdde03146100fa578063095ea7b31461011857806318160ddd14610148575b600080fd5b610102610322565b60405161010f9190610f25565b60405180910390f35b610132600480360381019061012d9190610fe0565b6103b4565b60405161013f919061103b565b60405180910390f35b6101506103d7565b60405161015d9190611065565b60405180910390f35b610180600480360381019061017b9190611080565b6103e1565b60405161018d919061103b565b60405180910390f35b61019e610410565b6040516101ab91906110ef565b60405180910390f35b6101ce60048036038101906101c99190610fe0565b610415565b6040516101db919061103b565b60405180910390f35b6101fe60048036038101906101f99190610fe0565b61044c565b005b61021a6004803603810190610215919061110a565b610462565b6040516102279190611065565b60405180910390f35b6102386104aa565b005b6102426104be565b60405161024f9190611146565b60405180910390f35b6102606104e8565b60405161026d9190610f25565b60405180910390f35b610290600480360381019061028b9190610fe0565b61057a565b60405161029d919061103b565b60405180910390f35b6102c060048036038101906102bb9190610fe0565b6105f1565b6040516102cd919061103b565b60405180910390f35b6102f060048036038101906102eb9190611161565b610614565b6040516102fd9190611065565b60405180910390f35b610320600480360381019061031b919061110a565b61069b565b005b606060038054610331906111d0565b80601f016020809104026020016040519081016040528092919081815260200182805461035d906111d0565b80156103aa5780601f1061037f576101008083540402835291602001916103aa565b820191906000526020600020905b81548152906001019060200180831161038d57829003601f168201915b5050505050905090565b6000806103bf61071e565b90506103cc818585610726565b600191505092915050565b6000600254905090565b6000806103ec61071e565b90506103f98582856108ef565b61040485858561097b565b60019150509392505050565b600090565b60008061042061071e565b90506104418185856104328589610614565b61043c9190611230565b610726565b600191505092915050565b610454610bf1565b61045e8282610c6f565b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6104b2610bf1565b6104bc6000610dc5565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546104f7906111d0565b80601f0160208091040260200160405190810160405280929190818152602001828054610523906111d0565b80156105705780601f1061054557610100808354040283529160200191610570565b820191906000526020600020905b81548152906001019060200180831161055357829003601f168201915b5050505050905090565b60008061058561071e565b905060006105938286610614565b9050838110156105d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105cf906112d6565b60405180910390fd5b6105e58286868403610726565b60019250505092915050565b6000806105fc61071e565b905061060981858561097b565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6106a3610bf1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070990611368565b60405180910390fd5b61071b81610dc5565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610795576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078c906113fa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610804576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107fb9061148c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516108e29190611065565b60405180910390a3505050565b60006108fb8484610614565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146109755781811015610967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095e906114f8565b60405180910390fd5b6109748484848403610726565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036109ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e19061158a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a509061161c565b60405180910390fd5b610a64838383610e8b565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae1906116ae565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610bd89190611065565b60405180910390a3610beb848484610e90565b50505050565b610bf961071e565b73ffffffffffffffffffffffffffffffffffffffff16610c176104be565b73ffffffffffffffffffffffffffffffffffffffff1614610c6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c649061171a565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd590611786565b60405180910390fd5b610cea60008383610e8b565b8060026000828254610cfc9190611230565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610dad9190611065565b60405180910390a3610dc160008383610e90565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610ecf578082015181840152602081019050610eb4565b60008484015250505050565b6000601f19601f8301169050919050565b6000610ef782610e95565b610f018185610ea0565b9350610f11818560208601610eb1565b610f1a81610edb565b840191505092915050565b60006020820190508181036000830152610f3f8184610eec565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610f7782610f4c565b9050919050565b610f8781610f6c565b8114610f9257600080fd5b50565b600081359050610fa481610f7e565b92915050565b6000819050919050565b610fbd81610faa565b8114610fc857600080fd5b50565b600081359050610fda81610fb4565b92915050565b60008060408385031215610ff757610ff6610f47565b5b600061100585828601610f95565b925050602061101685828601610fcb565b9150509250929050565b60008115159050919050565b61103581611020565b82525050565b6000602082019050611050600083018461102c565b92915050565b61105f81610faa565b82525050565b600060208201905061107a6000830184611056565b92915050565b60008060006060848603121561109957611098610f47565b5b60006110a786828701610f95565b93505060206110b886828701610f95565b92505060406110c986828701610fcb565b9150509250925092565b600060ff82169050919050565b6110e9816110d3565b82525050565b600060208201905061110460008301846110e0565b92915050565b6000602082840312156111205761111f610f47565b5b600061112e84828501610f95565b91505092915050565b61114081610f6c565b82525050565b600060208201905061115b6000830184611137565b92915050565b6000806040838503121561117857611177610f47565b5b600061118685828601610f95565b925050602061119785828601610f95565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806111e857607f821691505b6020821081036111fb576111fa6111a1565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061123b82610faa565b915061124683610faa565b925082820190508082111561125e5761125d611201565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006112c0602583610ea0565b91506112cb82611264565b604082019050919050565b600060208201905081810360008301526112ef816112b3565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611352602683610ea0565b915061135d826112f6565b604082019050919050565b6000602082019050818103600083015261138181611345565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006113e4602483610ea0565b91506113ef82611388565b604082019050919050565b60006020820190508181036000830152611413816113d7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611476602283610ea0565b91506114818261141a565b604082019050919050565b600060208201905081810360008301526114a581611469565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006114e2601d83610ea0565b91506114ed826114ac565b602082019050919050565b60006020820190508181036000830152611511816114d5565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611574602583610ea0565b915061157f82611518565b604082019050919050565b600060208201905081810360008301526115a381611567565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611606602383610ea0565b9150611611826115aa565b604082019050919050565b60006020820190508181036000830152611635816115f9565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611698602683610ea0565b91506116a38261163c565b604082019050919050565b600060208201905081810360008301526116c78161168b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611704602083610ea0565b915061170f826116ce565b602082019050919050565b60006020820190508181036000830152611733816116f7565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000611770601f83610ea0565b915061177b8261173a565b602082019050919050565b6000602082019050818103600083015261179f81611763565b905091905056fea26469706673582212209f4cb50364d157ac4a7f0dfe1e45375576e8c8156606ebe255dad62d0e07445764736f6c63430008120033