60806040526040518060400160405280601d81526020017f5769746864726177616c204e465420646562726964676574682e636f6d00000081525060039081610048919061031b565b506040518060400160405280600e81526020017f646562726964676574682e636f6d0000000000000000000000000000000000008152506004908161008d919061031b565b50614e2060055534801561009f575f80fd5b50604051806060016040528060358152602001612698603591396100c8816100ce60201b60201c565b506103ea565b80600290816100dd919061031b565b5050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061015c57607f821691505b60208210810361016f5761016e610118565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026101d17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610196565b6101db8683610196565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61021f61021a610215846101f3565b6101fc565b6101f3565b9050919050565b5f819050919050565b61023883610205565b61024c61024482610226565b8484546101a2565b825550505050565b5f90565b610260610254565b61026b81848461022f565b505050565b5b8181101561028e576102835f82610258565b600181019050610271565b5050565b601f8211156102d3576102a481610175565b6102ad84610187565b810160208510156102bc578190505b6102d06102c885610187565b830182610270565b50505b505050565b5f82821c905092915050565b5f6102f35f19846008026102d8565b1980831691505092915050565b5f61030b83836102e4565b9150826002028217905092915050565b610324826100e1565b67ffffffffffffffff81111561033d5761033c6100eb565b5b6103478254610145565b610352828285610292565b5f60209050601f831160018114610383575f8415610371578287015190505b61037b8582610300565b8655506103e2565b601f19841661039186610175565b5f5b828110156103b857848901518255600182019150602085019450602081019050610393565b868310156103d557848901516103d1601f8916826102e4565b8355505b6001600288020188555050505b505050505050565b6122a1806103f75f395ff3fe6080604052600436106100a5575f3560e01c80634e1273f4116100635780634e1273f4146101d9578063729ad39e1461021557806395d89b4114610231578063a22cb4651461025b578063e985e9c514610283578063f242432a146102bf576100a5565b8062fdd58e146100a957806301ffc9a7146100e557806306fdde03146101215780630e89341c1461014b57806318160ddd146101875780632eb2c2d6146101b1575b5f80fd5b3480156100b4575f80fd5b506100cf60048036038101906100ca91906115fe565b6102e7565b6040516100dc919061164b565b60405180910390f35b3480156100f0575f80fd5b5061010b600480360381019061010691906116b9565b61033c565b60405161011891906116fe565b60405180910390f35b34801561012c575f80fd5b5061013561041d565b6040516101429190611787565b60405180910390f35b348015610156575f80fd5b50610171600480360381019061016c91906117a7565b6104a9565b60405161017e9190611787565b60405180910390f35b348015610192575f80fd5b5061019b61053b565b6040516101a8919061164b565b60405180910390f35b3480156101bc575f80fd5b506101d760048036038101906101d291906119c2565b610541565b005b3480156101e4575f80fd5b506101ff60048036038101906101fa9190611b4d565b6105e8565b60405161020c9190611c7a565b60405180910390f35b61022f600480360381019061022a9190611cf3565b6106ef565b005b34801561023c575f80fd5b506102456107c6565b6040516102529190611787565b60405180910390f35b348015610266575f80fd5b50610281600480360381019061027c9190611d68565b610852565b005b34801561028e575f80fd5b506102a960048036038101906102a49190611da6565b610868565b6040516102b691906116fe565b60405180910390f35b3480156102ca575f80fd5b506102e560048036038101906102e09190611de4565b6108f6565b005b5f805f8381526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f7fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061040657507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061041657506104158261099d565b5b9050919050565b6003805461042a90611ea4565b80601f016020809104026020016040519081016040528092919081815260200182805461045690611ea4565b80156104a15780601f10610478576101008083540402835291602001916104a1565b820191905f5260205f20905b81548152906001019060200180831161048457829003601f168201915b505050505081565b6060600280546104b890611ea4565b80601f01602080910402602001604051908101604052809291908181526020018280546104e490611ea4565b801561052f5780601f106105065761010080835404028352916020019161052f565b820191905f5260205f20905b81548152906001019060200180831161051257829003601f168201915b50505050509050919050565b60055481565b5f61054a610a06565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415801561058f575061058d8682610868565b155b156105d35780866040517fe237d9220000000000000000000000000000000000000000000000000000000081526004016105ca929190611ee3565b60405180910390fd5b6105e08686868686610a0d565b505050505050565b6060815183511461063457815183516040517f5b05999100000000000000000000000000000000000000000000000000000000815260040161062b929190611f0a565b60405180910390fd5b5f835167ffffffffffffffff8111156106505761064f6117d6565b5b60405190808252806020026020018201604052801561067e5781602001602082028036833780820191505090505b5090505f5b84518110156106e4576106ba6106a28287610b0190919063ffffffff16565b6106b58387610b1490919063ffffffff16565b6102e7565b8282815181106106cd576106cc611f31565b5b602002602001018181525050806001019050610683565b508091505092915050565b5f5b828290508110156107c15782828281811061070f5761070e611f31565b5b90506020020160208101906107249190611f5e565b73ffffffffffffffffffffffffffffffffffffffff167343de2d77bf8027e25dbd179b491e8d64f38398aa73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f625f60016040516107ae929190612004565b60405180910390a48060010190506106f1565b505050565b600480546107d390611ea4565b80601f01602080910402602001604051908101604052809291908181526020018280546107ff90611ea4565b801561084a5780601f106108215761010080835404028352916020019161084a565b820191905f5260205f20905b81548152906001019060200180831161082d57829003601f168201915b505050505081565b61086461085d610a06565b8383610b27565b5050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f6108ff610a06565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415801561094457506109428682610868565b155b156109885780866040517fe237d92200000000000000000000000000000000000000000000000000000000815260040161097f929190611ee3565b60405180910390fd5b6109958686868686610c90565b505050505050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610a7d575f6040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401610a74919061202b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603610aed575f6040517f01a83514000000000000000000000000000000000000000000000000000000008152600401610ae4919061202b565b60405180910390fd5b610afa8585858585610d96565b5050505050565b5f60208202602084010151905092915050565b5f60208202602084010151905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b97575f6040517fced3e100000000000000000000000000000000000000000000000000000000008152600401610b8e919061202b565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610c8391906116fe565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610d00575f6040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401610cf7919061202b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603610d70575f6040517f01a83514000000000000000000000000000000000000000000000000000000008152600401610d67919061202b565b60405180910390fd5b5f80610d7c8585610e42565b91509150610d8d8787848487610d96565b50505050505050565b610da285858585610e72565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614610e3b575f610dde610a06565b90506001845103610e2a575f610dfd5f86610b1490919063ffffffff16565b90505f610e135f86610b1490919063ffffffff16565b9050610e23838989858589611202565b5050610e39565b610e388187878787876113b1565b5b505b5050505050565b60608060405191506001825283602083015260408201905060018152826020820152604081016040529250929050565b8051825114610ebc57815181516040517f5b059991000000000000000000000000000000000000000000000000000000008152600401610eb3929190611f0a565b60405180910390fd5b5f610ec5610a06565b90505f5b83518110156110c1575f610ee68286610b1490919063ffffffff16565b90505f610efc8386610b1490919063ffffffff16565b90505f73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161461101f575f805f8481526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610fcb57888183856040517f03dee4c5000000000000000000000000000000000000000000000000000000008152600401610fc29493929190612044565b60405180910390fd5b8181035f808581526020019081526020015f205f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16146110b457805f808481526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546110ac91906120b4565b925050819055505b5050806001019050610ec9565b50600183510361117c575f6110df5f85610b1490919063ffffffff16565b90505f6110f55f85610b1490919063ffffffff16565b90508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62858560405161116d929190611f0a565b60405180910390a450506111fb565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516111f29291906120e7565b60405180910390a45b5050505050565b5f8473ffffffffffffffffffffffffffffffffffffffff163b11156113a9578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161126295949392919061216e565b6020604051808303815f875af192505050801561129d57506040513d601f19601f8201168201806040525081019061129a91906121da565b60015b61131e573d805f81146112cb576040519150601f19603f3d011682016040523d82523d5f602084013e6112d0565b606091505b505f81510361131657846040517f57f447ce00000000000000000000000000000000000000000000000000000000815260040161130d919061202b565b60405180910390fd5b805181602001fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146113a757846040517f57f447ce00000000000000000000000000000000000000000000000000000000815260040161139e919061202b565b60405180910390fd5b505b505050505050565b5f8473ffffffffffffffffffffffffffffffffffffffff163b1115611558578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611411959493929190612205565b6020604051808303815f875af192505050801561144c57506040513d601f19601f8201168201806040525081019061144991906121da565b60015b6114cd573d805f811461147a576040519150601f19603f3d011682016040523d82523d5f602084013e61147f565b606091505b505f8151036114c557846040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016114bc919061202b565b60405180910390fd5b805181602001fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461155657846040517f57f447ce00000000000000000000000000000000000000000000000000000000815260040161154d919061202b565b60405180910390fd5b505b505050505050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61159a82611571565b9050919050565b6115aa81611590565b81146115b4575f80fd5b50565b5f813590506115c5816115a1565b92915050565b5f819050919050565b6115dd816115cb565b81146115e7575f80fd5b50565b5f813590506115f8816115d4565b92915050565b5f806040838503121561161457611613611569565b5b5f611621858286016115b7565b9250506020611632858286016115ea565b9150509250929050565b611645816115cb565b82525050565b5f60208201905061165e5f83018461163c565b92915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61169881611664565b81146116a2575f80fd5b50565b5f813590506116b38161168f565b92915050565b5f602082840312156116ce576116cd611569565b5b5f6116db848285016116a5565b91505092915050565b5f8115159050919050565b6116f8816116e4565b82525050565b5f6020820190506117115f8301846116ef565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61175982611717565b6117638185611721565b9350611773818560208601611731565b61177c8161173f565b840191505092915050565b5f6020820190508181035f83015261179f818461174f565b905092915050565b5f602082840312156117bc576117bb611569565b5b5f6117c9848285016115ea565b91505092915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61180c8261173f565b810181811067ffffffffffffffff8211171561182b5761182a6117d6565b5b80604052505050565b5f61183d611560565b90506118498282611803565b919050565b5f67ffffffffffffffff821115611868576118676117d6565b5b602082029050602081019050919050565b5f80fd5b5f61188f61188a8461184e565b611834565b905080838252602082019050602084028301858111156118b2576118b1611879565b5b835b818110156118db57806118c788826115ea565b8452602084019350506020810190506118b4565b5050509392505050565b5f82601f8301126118f9576118f86117d2565b5b813561190984826020860161187d565b91505092915050565b5f80fd5b5f67ffffffffffffffff8211156119305761192f6117d6565b5b6119398261173f565b9050602081019050919050565b828183375f83830152505050565b5f61196661196184611916565b611834565b90508281526020810184848401111561198257611981611912565b5b61198d848285611946565b509392505050565b5f82601f8301126119a9576119a86117d2565b5b81356119b9848260208601611954565b91505092915050565b5f805f805f60a086880312156119db576119da611569565b5b5f6119e8888289016115b7565b95505060206119f9888289016115b7565b945050604086013567ffffffffffffffff811115611a1a57611a1961156d565b5b611a26888289016118e5565b935050606086013567ffffffffffffffff811115611a4757611a4661156d565b5b611a53888289016118e5565b925050608086013567ffffffffffffffff811115611a7457611a7361156d565b5b611a8088828901611995565b9150509295509295909350565b5f67ffffffffffffffff821115611aa757611aa66117d6565b5b602082029050602081019050919050565b5f611aca611ac584611a8d565b611834565b90508083825260208201905060208402830185811115611aed57611aec611879565b5b835b81811015611b165780611b0288826115b7565b845260208401935050602081019050611aef565b5050509392505050565b5f82601f830112611b3457611b336117d2565b5b8135611b44848260208601611ab8565b91505092915050565b5f8060408385031215611b6357611b62611569565b5b5f83013567ffffffffffffffff811115611b8057611b7f61156d565b5b611b8c85828601611b20565b925050602083013567ffffffffffffffff811115611bad57611bac61156d565b5b611bb9858286016118e5565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b611bf5816115cb565b82525050565b5f611c068383611bec565b60208301905092915050565b5f602082019050919050565b5f611c2882611bc3565b611c328185611bcd565b9350611c3d83611bdd565b805f5b83811015611c6d578151611c548882611bfb565b9750611c5f83611c12565b925050600181019050611c40565b5085935050505092915050565b5f6020820190508181035f830152611c928184611c1e565b905092915050565b5f80fd5b5f8083601f840112611cb357611cb26117d2565b5b8235905067ffffffffffffffff811115611cd057611ccf611c9a565b5b602083019150836020820283011115611cec57611ceb611879565b5b9250929050565b5f8060208385031215611d0957611d08611569565b5b5f83013567ffffffffffffffff811115611d2657611d2561156d565b5b611d3285828601611c9e565b92509250509250929050565b611d47816116e4565b8114611d51575f80fd5b50565b5f81359050611d6281611d3e565b92915050565b5f8060408385031215611d7e57611d7d611569565b5b5f611d8b858286016115b7565b9250506020611d9c85828601611d54565b9150509250929050565b5f8060408385031215611dbc57611dbb611569565b5b5f611dc9858286016115b7565b9250506020611dda858286016115b7565b9150509250929050565b5f805f805f60a08688031215611dfd57611dfc611569565b5b5f611e0a888289016115b7565b9550506020611e1b888289016115b7565b9450506040611e2c888289016115ea565b9350506060611e3d888289016115ea565b925050608086013567ffffffffffffffff811115611e5e57611e5d61156d565b5b611e6a88828901611995565b9150509295509295909350565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611ebb57607f821691505b602082108103611ece57611ecd611e77565b5b50919050565b611edd81611590565b82525050565b5f604082019050611ef65f830185611ed4565b611f036020830184611ed4565b9392505050565b5f604082019050611f1d5f83018561163c565b611f2a602083018461163c565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60208284031215611f7357611f72611569565b5b5f611f80848285016115b7565b91505092915050565b5f819050919050565b5f819050919050565b5f611fb5611fb0611fab84611f89565b611f92565b6115cb565b9050919050565b611fc581611f9b565b82525050565b5f819050919050565b5f611fee611fe9611fe484611fcb565b611f92565b6115cb565b9050919050565b611ffe81611fd4565b82525050565b5f6040820190506120175f830185611fbc565b6120246020830184611ff5565b9392505050565b5f60208201905061203e5f830184611ed4565b92915050565b5f6080820190506120575f830187611ed4565b612064602083018661163c565b612071604083018561163c565b61207e606083018461163c565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6120be826115cb565b91506120c9836115cb565b92508282019050808211156120e1576120e0612087565b5b92915050565b5f6040820190508181035f8301526120ff8185611c1e565b905081810360208301526121138184611c1e565b90509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f6121408261211c565b61214a8185612126565b935061215a818560208601611731565b6121638161173f565b840191505092915050565b5f60a0820190506121815f830188611ed4565b61218e6020830187611ed4565b61219b604083018661163c565b6121a8606083018561163c565b81810360808301526121ba8184612136565b90509695505050505050565b5f815190506121d48161168f565b92915050565b5f602082840312156121ef576121ee611569565b5b5f6121fc848285016121c6565b91505092915050565b5f60a0820190506122185f830188611ed4565b6122256020830187611ed4565b81810360408301526122378186611c1e565b9050818103606083015261224b8185611c1e565b9050818103608083015261225f8184612136565b9050969550505050505056fea264697066735822122016ea7a739eb91c0b9299dc96c5b1fac4a74bc5f7db271a35ef1a98f5f3d4cb5564736f6c634300081a0033697066733a2f2f516d5638646335507339634c736f625865677a7a6f6a7671716a544d705a6e3358414a31646f7a6d634b32705476