CjMuMTogTW9kaWZ5IHRoZSBwcm9ncmFtcyBjcmVhdGVkIGluIExhYjIgdG8gaW1wbGVtZW50IEV4Y2VwdGlvbiBIYW5kbGluZwoKMy4yIFRoZSBmb2xsb3dpbmcgUEwvU1FMIGJsb2NrIGF0dGVtcHRzIHRvIGNhbGN1bGF0ZSBib251cyBvZiBzdGFmZiBmb3IgYSBnaXZlbiBNR1JfQ09ERS4gQm9udXMgaXMgdG8gYmUgY29uc2lkZXJlZCBhcyB0d2ljZSBvZiBzYWxhcnkuIFRob3VnaCBFeGNlcHRpb24gSGFuZGxpbmcgaGFzIGJlZW4gaW1wbGVtZW50ZWQgYnV0IGJsb2NrIGlzIHVuYWJsZSB0byBoYW5kbGUgdGhlIHNhbWUuCkRlYnVnIGFuZCB2ZXJpZnkgdGhlIGN1cnJlbnQgYmVoYXZpb3IgdG8gdHJhY2UgdGhlIHByb2JsZW0uCgpERUNMQVJFClZfQk9OVVMgVl9TQUwlVFlQRTsKVl9TQUwgU1RBRkZfTUFTVEVSLlNUQUZGX1NBTCVUWVBFOwoKQkVHSU4KU0VMRUNUIFNUQUZGX1NBTCBJTlRPIFZfU0FMCkZST00gU1RBRkZfTUFTVEVSIApXSEVSRSBNR1JfQ09ERT0xMDAwMDY7CgpWX0JPTlVTOj0yKlZfU0FMOwpEQk1TX09VVFBVVC5QVVRfTElORSgnU1RBRkYgU0FMQVJZIElTICcgfHwgVl9TQUwpOwpEQk1TX09VVFBVVC5QVVRfTElORSgnU1RBRkYgQk9OVVMgSVMgJyB8fCBWX0JPTlVTKTsKCkVYQ0VQVElPTgpXSEVOIE5PX0RBVEFfRk9VTkQgVEhFTgpEQk1TX09VVFBVVC5QVVRfTElORSgnR0lWRU4gQ09ERSBJUyBOT1QgVkFMSUQuRU5URVIgVkFMSUQgQ09ERScpOwpFTkQ7CgpFeGFtcGxlIDM6IFBML1NRTCBibG9jawpERUNMQVJFCiBWX0JPTlVTIG51bWJlcigxMCk7CiBWX1NBTCBTVEFGRl9NQVNURVIuU1RBRkZfU0FMJVRZUEU7CiBCRUdJTgogU0VMRUNUIFNUQUZGX1NBTCBJTlRPIFZfU0FMCiBGUk9NIFNUQUZGX01BU1RFUgogV0hFUkUgTUdSX0NPREU9MTAwMDA2OwogVl9CT05VUzo9MipWX1NBTDsKIERCTVNfT1VUUFVULlBVVF9MSU5FKCdTVEFGRiBTQUxBUlkgSVMgJyB8fCBWX1NBTCk7CiBEQk1TX09VVFBVVC5QVVRfTElORSgnU1RBRkYgQk9OVVMgSVMgJyB8fCBWX0JPTlVTKTsKIEVYQ0VQVElPTgogV0hFTiB0b29fbWFueV9yb3dzIFRIRU4KIERCTVNfT1VUUFVULlBVVF9MSU5FKCdHSVZFTiBDT0RFIElTIE5PVCBWQUxJRC5FTlRFUiBWQUxJRCBDT0RFJyk7CiBFTkQ7CiAKCjMuMyBSZXdyaXRlIHRoZSBhYm92ZSBibG9jayB0byBhY2hpZXZlIHRoZSByZXF1aXJlbWVudC4KREVDTEFSRQpDVVJTT1IgYzEgaXMgU0VMRUNUIFNUQUZGX1NBTCwgU1RBRkZfU0FMKjIgJnF1b3Q7U1RBRkZfQk9OVVMmcXVvdDsKRlJPTSBTVEFGRl9NQVNURVIgCldIRVJFIE1HUl9DT0RFPTEwMDAwNjsKQkVHSU4KRk9SIEkgSU4gQzEgTE9PUApEQk1TX09VVFBVVC5QVVRfTElORSgnU1RBRkYgU0FMQVJZIElTICcgfHwgSS5TVEFGRl9TQUwpOwpEQk1TX09VVFBVVC5QVVRfTElORSgnU1RBRkYgQk9OVVMgSVMgJyB8fCBJLlNUQUZGX0JPTlVTKTsKRU5EIExPT1A7CkVYQ0VQVElPTgpXSEVOIE5PX0RBVEFfRk9VTkQgVEhFTgpEQk1TX09VVFBVVC5QVVRfTElORSgnR0lWRU4gQ09ERSBJUyBOT1QgVkFMSUQuRU5URVIgVkFMSUQgQ09ERScpOwpXSEVOIFRPT19NQU5ZX1JPV1MgVEhFTgpEQk1TX09VVFBVVC5QVVRfTElORSgnVE9PIE1BTlkgUk9XUycpOwpFTkQ7CiAKMy40ClByZWRpY3QgdGhlIG91dHB1dCBvZiB0aGUgZm9sbG93aW5nIGJsb2NrID8gV2hhdCBjb3JyZWN0aW9ucyB3b3VsZCBiZSBuZWVkZWQgdG8gbWFrZSBpdCBtb3JlIGVmZmljaWVudD8KCgoKQkVHSU4KICAgICAgREVDTEFSRQogICAgICBmbmFtZSBlbXAuZW5hbWUlVFlQRTsKICAgICAgQkVHSU4KICAgICAgU0VMRUNUIGVuYW1lIElOVE8gZm5hbWUKICAgICAgRlJPTSBlbXAKICAgICAgV0hFUkUgMT0yOwoKICAgICAgREJNU19PVVRQVVQuUFVUX0xJTkUoJ1RoaXMgc3RhdGVtZW50IHdpbGwgcHJpbnQnKTsKICAgICAgRVhDRVBUSU9OCiAgICAgIFdIRU4gT1RIRVJTIFRIRU4KICAgICAgREJNU19PVVRQVVQuUFVUX0xJTkUoJ1NvbWUgaW5uZXIgYmxvY2sgZXJyb3InKTsKICAgICAgRU5EOwoKIEVYQ0VQVElPTgogV0hFTiBOT19EQVRBX0ZPVU5EIFRIRU4KIERCTVNfT1VUUFVULlBVVF9MSU5FKCdObyBkYXRhIGZvdW5kIGluIGZuYW1lJyk7CgogV0hFTiBPVEhFUlMgVEhFTgogREJNU19PVVRQVVQuUFVUX0xJTkUoJ1NvbWUgb3V0ZXIgYmxvY2sgZXJyb3InKTsKIEVORDsKQkVHSU4KICAgICAgREVDTEFSRQogICAgICBDVVJTT1IgYzEgaXMgU0VMRUNUIGVuYW1lIEZST00gZW1wIFdIRVJFIDE9MjsKICAgICAgZm5hbWUgZW1wLmVuYW1lJVRZUEU7CiAgICAgIEJFR0lOCiAgICAgIE9QRU4gQzE7CiAgICAgIEZFVENIIEMxIElOVE8gZm5hbWU7CiAgICAgIERCTVNfT1VUUFVULlBVVF9MSU5FKCdUaGlzIHN0YXRlbWVudCB3aWxsIHByaW50Jyk7CiAgICAgIENMT1NFIEMxOwogICAgICBFWENFUFRJT04KICAgICAgV0hFTiBPVEhFUlMgVEhFTgogICAgICBEQk1TX09VVFBVVC5QVVRfTElORSgnU29tZSBpbm5lciBibG9jayBlcnJvcicpOwogICAgICBFTkQ7CiBFWENFUFRJT04KIFdIRU4gTk9fREFUQV9GT1VORCBUSEVOCiBEQk1TX09VVFBVVC5QVVRfTElORSgnTm8gZGF0YSBmb3VuZCBpbiBmbmFtZScpOwogV0hFTiBPVEhFUlMgVEhFTgogREJNU19PVVRQVVQuUFVUX0xJTkUoJ1NvbWUgb3V0ZXIgYmxvY2sgZXJyb3InKTsKIEVORDsKIAozLjUgRGVidWcgdGhlIGFib3ZlIGJsb2NrIHRvIHRyYWNlIHRoZSBmbG93IG9mIGNvbnRyb2wuIAogICAgICBBZGRpdGlvbmFsbHkgb25lIGNhbiBtYWtlIGFwcHJvcHJpYXRlIGNoYW5nZXMgaW4gU2VsZWN0IHN0YXRlbWVudCBkZWZpbmVkIGluIHRoZSAKICAgICAgYmxvY2sgdG8gY2hlY2sgdGhlIGZsb3cuCgoKMy42OiBXcml0ZSBhIFBML1NRTCBwcm9ncmFtIHRvIGNoZWNrIGZvciB0aGUgY29tbWlzc2lvbiBmb3IgYW4gZW1wbG95ZWUgbm8gNzM2OS4gSWYgbm8gY29tbWlzc2lvbiBleGlzdHMsIHRoZW4gZGlzcGxheSB0aGUgZXJyb3IgbWVzc2FnZS4gVXNlIEV4Y2VwdGlvbnMuIAoKIERFQ0xBUkUKIENVUlNPUiBDMSBJUyBTRUxFQ1QgY29tbQogRlJPTSBlbXAKIFdIRVJFIGVtcG5vPTczNjk7CiBleGNlcCBFWENFUFRJT047CiBCRUdJTgogRk9SIEkgSU4gQzEgTE9PUAogREJNU19PVVRQVVQuUFVUX0xJTkUoaS5jb21tKTsKIEVORCBMT09QOwogSUYgbnVsbCBpcyBudWxsIHRoZW4KIHJhaXNlIGV4Y2VwOwogZWxzZSBudWxsOwogZW5kIGlmOwogRVhDRVBUSU9OCiB3aGVuIGV4Y2VwIHRoZW4KIG51bGw7CiBEQk1TX09VVFBVVC5QVVRfTElORSgnQ09NTUlTSU9OIElTIE5VTEwnKTsKIEVORDsKIAozLjc6IFdyaXRlIGEgUEwvU1FMIGJsb2NrIHRvIGRyb3AgYW55IHVzZXIgZGVmaW5lZCB0YWJsZS4KQ1JFQVRFIE9SIFJFUExBQ0UgUFJPQ0VEVVJFIGRyb3BpdCAodHR5cGUgaW4gdmFyY2hhcjIsIHRhYmxlX25hbWUgaW4gdmFyY2hhcjIpIEFTCkJFR0lOCiAgICAgICBFWEVDVVRFIElNTUVESUFURSAnRFJPUCAnIHx8dHR5cGV8fCcgJ3x8dGFibGVfbmFtZTsKRU5EOwovCmV4ZWMgZHJvcGl0KCd0YWJsZScsJ2VtcF9jb3B5Jyk7Ci8Kc2VsZWN0ICogZnJvbSBlbXBfY29weTsKIAoKCgoKCgoKCjMuMTogTW9kaWZ5IHRoZSBwcm9ncmFtcyBjcmVhdGVkIGluIExhYjIgdG8gaW1wbGVtZW50IEV4Y2VwdGlvbiBIYW5kbGluZwoKMy4yIFRoZSBmb2xsb3dpbmcgUEwvU1FMIGJsb2NrIGF0dGVtcHRzIHRvIGNhbGN1bGF0ZSBib251cyBvZiBzdGFmZiBmb3IgYSBnaXZlbiBNR1JfQ09ERS4gQm9udXMgaXMgdG8gYmUgY29uc2lkZXJlZCBhcyB0d2ljZSBvZiBzYWxhcnkuIFRob3VnaCBFeGNlcHRpb24gSGFuZGxpbmcgaGFzIGJlZW4gaW1wbGVtZW50ZWQgYnV0IGJsb2NrIGlzIHVuYWJsZSB0byBoYW5kbGUgdGhlIHNhbWUuCkRlYnVnIGFuZCB2ZXJpZnkgdGhlIGN1cnJlbnQgYmVoYXZpb3IgdG8gdHJhY2UgdGhlIHByb2JsZW0uCgpERUNMQVJFClZfQk9OVVMgVl9TQUwlVFlQRTsKVl9TQUwgU1RBRkZfTUFTVEVSLlNUQUZGX1NBTCVUWVBFOwoKQkVHSU4KU0VMRUNUIFNUQUZGX1NBTCBJTlRPIFZfU0FMCkZST00gU1RBRkZfTUFTVEVSIApXSEVSRSBNR1JfQ09ERT0xMDAwMDY7CgpWX0JPTlVTOj0yKlZfU0FMOwpEQk1TX09VVFBVVC5QVVRfTElORSgnU1RBRkYgU0FMQVJZIElTICcgfHwgVl9TQUwpOwpEQk1TX09VVFBVVC5QVVRfTElORSgnU1RBRkYgQk9OVVMgSVMgJyB8fCBWX0JPTlVTKTsKCkVYQ0VQVElPTgpXSEVOIE5PX0RBVEFfRk9VTkQgVEhFTgpEQk1TX09VVFBVVC5QVVRfTElORSgnR0lWRU4gQ09ERSBJUyBOT1QgVkFMSUQuRU5URVIgVkFMSUQgQ09ERScpOwpFTkQ7CgpFeGFtcGxlIDM6IFBML1NRTCBibG9jawpERUNMQVJFCiBWX0JPTlVTIG51bWJlcigxMCk7CiBWX1NBTCBTVEFGRl9NQVNURVIuU1RBRkZfU0FMJVRZUEU7CiBCRUdJTgogU0VMRUNUIFNUQUZGX1NBTCBJTlRPIFZfU0FMCiBGUk9NIFNUQUZGX01BU1RFUgogV0hFUkUgTUdSX0NPREU9MTAwMDA2OwogVl9CT05VUzo9MipWX1NBTDsKIERCTVNfT1VUUFVULlBVVF9MSU5FKCdTVEFGRiBTQUxBUlkgSVMgJyB8fCBWX1NBTCk7CiBEQk1TX09VVFBVVC5QVVRfTElORSgnU1RBRkYgQk9OVVMgSVMgJyB8fCBWX0JPTlVTKTsKIEVYQ0VQVElPTgogV0hFTiB0b29fbWFueV9yb3dzIFRIRU4KIERCTVNfT1VUUFVULlBVVF9MSU5FKCdHSVZFTiBDT0RFIElTIE5PVCBWQUxJRC5FTlRFUiBWQUxJRCBDT0RFJyk7CiBFTkQ7CiAKCjMuMyBSZXdyaXRlIHRoZSBhYm92ZSBibG9jayB0byBhY2hpZXZlIHRoZSByZXF1aXJlbWVudC4KREVDTEFSRQpDVVJTT1IgYzEgaXMgU0VMRUNUIFNUQUZGX1NBTCwgU1RBRkZfU0FMKjIgJnF1b3Q7U1RBRkZfQk9OVVMmcXVvdDsKRlJPTSBTVEFGRl9NQVNURVIgCldIRVJFIE1HUl9DT0RFPTEwMDAwNjsKQkVHSU4KRk9SIEkgSU4gQzEgTE9PUApEQk1TX09VVFBVVC5QVVRfTElORSgnU1RBRkYgU0FMQVJZIElTICcgfHwgSS5TVEFGRl9TQUwpOwpEQk1TX09VVFBVVC5QVVRfTElORSgnU1RBRkYgQk9OVVMgSVMgJyB8fCBJLlNUQUZGX0JPTlVTKTsKRU5EIExPT1A7CkVYQ0VQVElPTgpXSEVOIE5PX0RBVEFfRk9VTkQgVEhFTgpEQk1TX09VVFBVVC5QVVRfTElORSgnR0lWRU4gQ09ERSBJUyBOT1QgVkFMSUQuRU5URVIgVkFMSUQgQ09ERScpOwpXSEVOIFRPT19NQU5ZX1JPV1MgVEhFTgpEQk1TX09VVFBVVC5QVVRfTElORSgnVE9PIE1BTlkgUk9XUycpOwpFTkQ7CiAKMy40ClByZWRpY3QgdGhlIG91dHB1dCBvZiB0aGUgZm9sbG93aW5nIGJsb2NrID8gV2hhdCBjb3JyZWN0aW9ucyB3b3VsZCBiZSBuZWVkZWQgdG8gbWFrZSBpdCBtb3JlIGVmZmljaWVudD8KCgoKQkVHSU4KICAgICAgREVDTEFSRQogICAgICBmbmFtZSBlbXAuZW5hbWUlVFlQRTsKICAgICAgQkVHSU4KICAgICAgU0VMRUNUIGVuYW1lIElOVE8gZm5hbWUKICAgICAgRlJPTSBlbXAKICAgICAgV0hFUkUgMT0yOwoKICAgICAgREJNU19PVVRQVVQuUFVUX0xJTkUoJ1RoaXMgc3RhdGVtZW50IHdpbGwgcHJpbnQnKTsKICAgICAgRVhDRVBUSU9OCiAgICAgIFdIRU4gT1RIRVJTIFRIRU4KICAgICAgREJNU19PVVRQVVQuUFVUX0xJTkUoJ1NvbWUgaW5uZXIgYmxvY2sgZXJyb3InKTsKICAgICAgRU5EOwoKIEVYQ0VQVElPTgogV0hFTiBOT19EQVRBX0ZPVU5EIFRIRU4KIERCTVNfT1VUUFVULlBVVF9MSU5FKCdObyBkYXRhIGZvdW5kIGluIGZuYW1lJyk7CgogV0hFTiBPVEhFUlMgVEhFTgogREJNU19PVVRQVVQuUFVUX0xJTkUoJ1NvbWUgb3V0ZXIgYmxvY2sgZXJyb3InKTsKIEVORDsKQkVHSU4KICAgICAgREVDTEFSRQogICAgICBDVVJTT1IgYzEgaXMgU0VMRUNUIGVuYW1lIEZST00gZW1wIFdIRVJFIDE9MjsKICAgICAgZm5hbWUgZW1wLmVuYW1lJVRZUEU7CiAgICAgIEJFR0lOCiAgICAgIE9QRU4gQzE7CiAgICAgIEZFVENIIEMxIElOVE8gZm5hbWU7CiAgICAgIERCTVNfT1VUUFVULlBVVF9MSU5FKCdUaGlzIHN0YXRlbWVudCB3aWxsIHByaW50Jyk7CiAgICAgIENMT1NFIEMxOwogICAgICBFWENFUFRJT04KICAgICAgV0hFTiBPVEhFUlMgVEhFTgogICAgICBEQk1TX09VVFBVVC5QVVRfTElORSgnU29tZSBpbm5lciBibG9jayBlcnJvcicpOwogICAgICBFTkQ7CiBFWENFUFRJT04KIFdIRU4gTk9fREFUQV9GT1VORCBUSEVOCiBEQk1TX09VVFBVVC5QVVRfTElORSgnTm8gZGF0YSBmb3VuZCBpbiBmbmFtZScpOwogV0hFTiBPVEhFUlMgVEhFTgogREJNU19PVVRQVVQuUFVUX0xJTkUoJ1NvbWUgb3V0ZXIgYmxvY2sgZXJyb3InKTsKIEVORDsKIAozLjUgRGVidWcgdGhlIGFib3ZlIGJsb2NrIHRvIHRyYWNlIHRoZSBmbG93IG9mIGNvbnRyb2wuIAogICAgICBBZGRpdGlvbmFsbHkgb25lIGNhbiBtYWtlIGFwcHJvcHJpYXRlIGNoYW5nZXMgaW4gU2VsZWN0IHN0YXRlbWVudCBkZWZpbmVkIGluIHRoZSAKICAgICAgYmxvY2sgdG8gY2hlY2sgdGhlIGZsb3cuCgoKMy42OiBXcml0ZSBhIFBML1NRTCBwcm9ncmFtIHRvIGNoZWNrIGZvciB0aGUgY29tbWlzc2lvbiBmb3IgYW4gZW1wbG95ZWUgbm8gNzM2OS4gSWYgbm8gY29tbWlzc2lvbiBleGlzdHMsIHRoZW4gZGlzcGxheSB0aGUgZXJyb3IgbWVzc2FnZS4gVXNlIEV4Y2VwdGlvbnMuIAoKIERFQ0xBUkUKIENVUlNPUiBDMSBJUyBTRUxFQ1QgY29tbQogRlJPTSBlbXAKIFdIRVJFIGVtcG5vPTczNjk7CiBleGNlcCBFWENFUFRJT047CiBCRUdJTgogRk9SIEkgSU4gQzEgTE9PUAogREJNU19PVVRQVVQuUFVUX0xJTkUoaS5jb21tKTsKIEVORCBMT09QOwogSUYgbnVsbCBpcyBudWxsIHRoZW4KIHJhaXNlIGV4Y2VwOwogZWxzZSBudWxsOwogZW5kIGlmOwogRVhDRVBUSU9OCiB3aGVuIGV4Y2VwIHRoZW4KIG51bGw7CiBEQk1TX09VVFBVVC5QVVRfTElORSgnQ09NTUlTSU9OIElTIE5VTEwnKTsKIEVORDsKIAozLjc6IFdyaXRlIGEgUEwvU1FMIGJsb2NrIHRvIGRyb3AgYW55IHVzZXIgZGVmaW5lZCB0YWJsZS4KQ1JFQVRFIE9SIFJFUExBQ0UgUFJPQ0VEVVJFIGRyb3BpdCAodHR5cGUgaW4gdmFyY2hhcjIsIHRhYmxlX25hbWUgaW4gdmFyY2hhcjIpIEFTCkJFR0lOCiAgICAgICBFWEVDVVRFIElNTUVESUFURSAnRFJPUCAnIHx8dHR5cGV8fCcgJ3x8dGFibGVfbmFtZTsKRU5EOwovCmV4ZWMgZHJvcGl0KCd0YWJsZScsJ2VtcF9jb3B5Jyk7Ci8Kc2VsZWN0ICogZnJvbSBlbXBfY29weTsKIAoKCgoKCgoKCjMuMTogTW9kaWZ5IHRoZSBwcm9ncmFtcyBjcmVhdGVkIGluIExhYjIgdG8gaW1wbGVtZW50IEV4Y2VwdGlvbiBIYW5kbGluZwoKMy4yIFRoZSBmb2xsb3dpbmcgUEwvU1FMIGJsb2NrIGF0dGVtcHRzIHRvIGNhbGN1bGF0ZSBib251cyBvZiBzdGFmZiBmb3IgYSBnaXZlbiBNR1JfQ09ERS4gQm9udXMgaXMgdG8gYmUgY29uc2lkZXJlZCBhcyB0d2ljZSBvZiBzYWxhcnkuIFRob3VnaCBFeGNlcHRpb24gSGFuZGxpbmcgaGFzIGJlZW4gaW1wbGVtZW50ZWQgYnV0IGJsb2NrIGlzIHVuYWJsZSB0byBoYW5kbGUgdGhlIHNhbWUuCkRlYnVnIGFuZCB2ZXJpZnkgdGhlIGN1cnJlbnQgYmVoYXZpb3IgdG8gdHJhY2UgdGhlIHByb2JsZW0uCgpERUNMQVJFClZfQk9OVVMgVl9TQUwlVFlQRTsKVl9TQUwgU1RBRkZfTUFTVEVSLlNUQUZGX1NBTCVUWVBFOwoKQkVHSU4KU0VMRUNUIFNUQUZGX1NBTCBJTlRPIFZfU0FMCkZST00gU1RBRkZfTUFTVEVSIApXSEVSRSBNR1JfQ09ERT0xMDAwMDY7CgpWX0JPTlVTOj0yKlZfU0FMOwpEQk1TX09VVFBVVC5QVVRfTElORSgnU1RBRkYgU0FMQVJZIElTICcgfHwgVl9TQUwpOwpEQk1TX09VVFBVVC5QVVRfTElORSgnU1RBRkYgQk9OVVMgSVMgJyB8fCBWX0JPTlVTKTsKCkVYQ0VQVElPTgpXSEVOIE5PX0RBVEFfRk9VTkQgVEhFTgpEQk1TX09VVFBVVC5QVVRfTElORSgnR0lWRU4gQ09ERSBJUyBOT1QgVkFMSUQuRU5URVIgVkFMSUQgQ09ERScpOwpFTkQ7CgpFeGFtcGxlIDM6IFBML1NRTCBibG9jawpERUNMQVJFCiBWX0JPTlVTIG51bWJlcigxMCk7CiBWX1NBTCBTVEFGRl9NQVNURVIuU1RBRkZfU0FMJVRZUEU7CiBCRUdJTgogU0VMRUNUIFNUQUZGX1NBTCBJTlRPIFZfU0FMCiBGUk9NIFNUQUZGX01BU1RFUgogV0hFUkUgTUdSX0NPREU9MTAwMDA2OwogVl9CT05VUzo9MipWX1NBTDsKIERCTVNfT1VUUFVULlBVVF9MSU5FKCdTVEFGRiBTQUxBUlkgSVMgJyB8fCBWX1NBTCk7CiBEQk1TX09VVFBVVC5QVVRfTElORSgnU1RBRkYgQk9OVVMgSVMgJyB8fCBWX0JPTlVTKTsKIEVYQ0VQVElPTgogV0hFTiB0b29fbWFueV9yb3dzIFRIRU4KIERCTVNfT1VUUFVULlBVVF9MSU5FKCdHSVZFTiBDT0RFIElTIE5PVCBWQUxJRC5FTlRFUiBWQUxJRCBDT0RFJyk7CiBFTkQ7CiAKCjMuMyBSZXdyaXRlIHRoZSBhYm92ZSBibG9jayB0byBhY2hpZXZlIHRoZSByZXF1aXJlbWVudC4KREVDTEFSRQpDVVJTT1IgYzEgaXMgU0VMRUNUIFNUQUZGX1NBTCwgU1RBRkZfU0FMKjIgJnF1b3Q7U1RBRkZfQk9OVVMmcXVvdDsKRlJPTSBTVEFGRl9NQVNURVIgCldIRVJFIE1HUl9DT0RFPTEwMDAwNjsKQkVHSU4KRk9SIEkgSU4gQzEgTE9PUApEQk1TX09VVFBVVC5QVVRfTElORSgnU1RBRkYgU0FMQVJZIElTICcgfHwgSS5TVEFGRl9TQUwpOwpEQk1TX09VVFBVVC5QVVRfTElORSgnU1RBRkYgQk9OVVMgSVMgJyB8fCBJLlNUQUZGX0JPTlVTKTsKRU5EIExPT1A7CkVYQ0VQVElPTgpXSEVOIE5PX0RBVEFfRk9VTkQgVEhFTgpEQk1TX09VVFBVVC5QVVRfTElORSgnR0lWRU4gQ09ERSBJUyBOT1QgVkFMSUQuRU5URVIgVkFMSUQgQ09ERScpOwpXSEVOIFRPT19NQU5ZX1JPV1MgVEhFTgpEQk1TX09VVFBVVC5QVVRfTElORSgnVE9PIE1BTlkgUk9XUycpOwpFTkQ7CiAKMy40ClByZWRpY3QgdGhlIG91dHB1dCBvZiB0aGUgZm9sbG93aW5nIGJsb2NrID8gV2hhdCBjb3JyZWN0aW9ucyB3b3VsZCBiZSBuZWVkZWQgdG8gbWFrZSBpdCBtb3JlIGVmZmljaWVudD8KCgoKQkVHSU4KICAgICAgREVDTEFSRQogICAgICBmbmFtZSBlbXAuZW5hbWUlVFlQRTsKICAgICAgQkVHSU4KICAgICAgU0VMRUNUIGVuYW1lIElOVE8gZm5hbWUKICAgICAgRlJPTSBlbXAKICAgICAgV0hFUkUgMT0yOwoKICAgICAgREJNU19PVVRQVVQuUFVUX0xJTkUoJ1RoaXMgc3RhdGVtZW50IHdpbGwgcHJpbnQnKTsKICAgICAgRVhDRVBUSU9OCiAgICAgIFdIRU4gT1RIRVJTIFRIRU4KICAgICAgREJNU19PVVRQVVQuUFVUX0xJTkUoJ1NvbWUgaW5uZXIgYmxvY2sgZXJyb3InKTsKICAgICAgRU5EOwoKIEVYQ0VQVElPTgogV0hFTiBOT19EQVRBX0ZPVU5EIFRIRU4KIERCTVNfT1VUUFVULlBVVF9MSU5FKCdObyBkYXRhIGZvdW5kIGluIGZuYW1lJyk7CgogV0hFTiBPVEhFUlMgVEhFTgogREJNU19PVVRQVVQuUFVUX0xJTkUoJ1NvbWUgb3V0ZXIgYmxvY2sgZXJyb3InKTsKIEVORDsKQkVHSU4KICAgICAgREVDTEFSRQogICAgICBDVVJTT1IgYzEgaXMgU0VMRUNUIGVuYW1lIEZST00gZW1wIFdIRVJFIDE9MjsKICAgICAgZm5hbWUgZW1wLmVuYW1lJVRZUEU7CiAgICAgIEJFR0lOCiAgICAgIE9QRU4gQzE7CiAgICAgIEZFVENIIEMxIElOVE8gZm5hbWU7CiAgICAgIERCTVNfT1VUUFVULlBVVF9MSU5FKCdUaGlzIHN0YXRlbWVudCB3aWxsIHByaW50Jyk7CiAgICAgIENMT1NFIEMxOwogICAgICBFWENFUFRJT04KICAgICAgV0hFTiBPVEhFUlMgVEhFTgogICAgICBEQk1TX09VVFBVVC5QVVRfTElORSgnU29tZSBpbm5lciBibG9jayBlcnJvcicpOwogICAgICBFTkQ7CiBFWENFUFRJT04KIFdIRU4gTk9fREFUQV9GT1VORCBUSEVOCiBEQk1TX09VVFBVVC5QVVRfTElORSgnTm8gZGF0YSBmb3VuZCBpbiBmbmFtZScpOwogV0hFTiBPVEhFUlMgVEhFTgogREJNU19PVVRQVVQuUFVUX0xJTkUoJ1NvbWUgb3V0ZXIgYmxvY2sgZXJyb3InKTsKIEVORDsKIAozLjUgRGVidWcgdGhlIGFib3ZlIGJsb2NrIHRvIHRyYWNlIHRoZSBmbG93IG9mIGNvbnRyb2wuIAogICAgICBBZGRpdGlvbmFsbHkgb25lIGNhbiBtYWtlIGFwcHJvcHJpYXRlIGNoYW5nZXMgaW4gU2VsZWN0IHN0YXRlbWVudCBkZWZpbmVkIGluIHRoZSAKICAgICAgYmxvY2sgdG8gY2hlY2sgdGhlIGZsb3cuCgoKMy42OiBXcml0ZSBhIFBML1NRTCBwcm9ncmFtIHRvIGNoZWNrIGZvciB0aGUgY29tbWlzc2lvbiBmb3IgYW4gZW1wbG95ZWUgbm8gNzM2OS4gSWYgbm8gY29tbWlzc2lvbiBleGlzdHMsIHRoZW4gZGlzcGxheSB0aGUgZXJyb3IgbWVzc2FnZS4gVXNlIEV4Y2VwdGlvbnMuIAoKIERFQ0xBUkUKIENVUlNPUiBDMSBJUyBTRUxFQ1QgY29tbQogRlJPTSBlbXAKIFdIRVJFIGVtcG5vPTczNjk7CiBleGNlcCBFWENFUFRJT047CiBCRUdJTgogRk9SIEkgSU4gQzEgTE9PUAogREJNU19PVVRQVVQuUFVUX0xJTkUoaS5jb21tKTsKIEVORCBMT09QOwogSUYgbnVsbCBpcyBudWxsIHRoZW4KIHJhaXNlIGV4Y2VwOwogZWxzZSBudWxsOwogZW5kIGlmOwogRVhDRVBUSU9OCiB3aGVuIGV4Y2VwIHRoZW4KIG51bGw7CiBEQk1TX09VVFBVVC5QVVRfTElORSgnQ09NTUlTSU9OIElTIE5VTEwnKTsKIEVORDsKIAozLjc6IFdyaXRlIGEgUEwvU1FMIGJsb2NrIHRvIGRyb3AgYW55IHVzZXIgZGVmaW5lZCB0YWJsZS4KQ1JFQVRFIE9SIFJFUExBQ0UgUFJPQ0VEVVJFIGRyb3BpdCAodHR5cGUgaW4gdmFyY2hhcjIsIHRhYmxlX25hbWUgaW4gdmFyY2hhcjIpIEFTCkJFR0lOCiAgICAgICBFWEVDVVRFIElNTUVESUFURSAnRFJPUCAnIHx8dHR5cGV8fCcgJ3x8dGFibGVfbmFtZTsKRU5EOwovCmV4ZWMgZHJvcGl0KCd0YWJsZScsJ2VtcF9jb3B5Jyk7Ci8Kc2VsZWN0ICogZnJvbSBlbXBfY29weTsKIAoKCgoKCgoK
3.1: Modify the programs created in Lab2 to implement Exception Handling
3.2 The following PL/SQL block attempts to calculate bonus of staff for a given MGR_CODE. Bonus is to be considered as twice of salary. Though Exception Handling has been implemented but block is unable to handle the same.
Debug and verify the current behavior to trace the problem.
DECLARE
V_BONUS V_SAL%TYPE;
V_SAL STAFF_MASTER.STAFF_SAL%TYPE;
BEGIN
SELECT STAFF_SAL INTO V_SAL
FROM STAFF_MASTER
WHERE MGR_CODE=100006;
V_BONUS:=2*V_SAL;
DBMS_OUTPUT.PUT_LINE('STAFF SALARY IS ' || V_SAL);
DBMS_OUTPUT.PUT_LINE('STAFF BONUS IS ' || V_BONUS);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('GIVEN CODE IS NOT VALID.ENTER VALID CODE');
END;
Example 3: PL/SQL block
DECLARE
V_BONUS number(10);
V_SAL STAFF_MASTER.STAFF_SAL%TYPE;
BEGIN
SELECT STAFF_SAL INTO V_SAL
FROM STAFF_MASTER
WHERE MGR_CODE=100006;
V_BONUS:=2*V_SAL;
DBMS_OUTPUT.PUT_LINE('STAFF SALARY IS ' || V_SAL);
DBMS_OUTPUT.PUT_LINE('STAFF BONUS IS ' || V_BONUS);
EXCEPTION
WHEN too_many_rows THEN
DBMS_OUTPUT.PUT_LINE('GIVEN CODE IS NOT VALID.ENTER VALID CODE');
END;
3.3 Rewrite the above block to achieve the requirement.
DECLARE
CURSOR c1 is SELECT STAFF_SAL, STAFF_SAL*2 "STAFF_BONUS"
FROM STAFF_MASTER
WHERE MGR_CODE=100006;
BEGIN
FOR I IN C1 LOOP
DBMS_OUTPUT.PUT_LINE('STAFF SALARY IS ' || I.STAFF_SAL);
DBMS_OUTPUT.PUT_LINE('STAFF BONUS IS ' || I.STAFF_BONUS);
END LOOP;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('GIVEN CODE IS NOT VALID.ENTER VALID CODE');
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE('TOO MANY ROWS');
END;
3.4
Predict the output of the following block ? What corrections would be needed to make it more efficient?
BEGIN
DECLARE
fname emp.ename%TYPE;
BEGIN
SELECT ename INTO fname
FROM emp
WHERE 1=2;
DBMS_OUTPUT.PUT_LINE('This statement will print');
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Some inner block error');
END;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('No data found in fname');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Some outer block error');
END;
BEGIN
DECLARE
CURSOR c1 is SELECT ename FROM emp WHERE 1=2;
fname emp.ename%TYPE;
BEGIN
OPEN C1;
FETCH C1 INTO fname;
DBMS_OUTPUT.PUT_LINE('This statement will print');
CLOSE C1;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Some inner block error');
END;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('No data found in fname');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Some outer block error');
END;
3.5 Debug the above block to trace the flow of control.
Additionally one can make appropriate changes in Select statement defined in the
block to check the flow.
3.6: Write a PL/SQL program to check for the commission for an employee no 7369. If no commission exists, then display the error message. Use Exceptions.
DECLARE
CURSOR C1 IS SELECT comm
FROM emp
WHERE empno=7369;
excep EXCEPTION;
BEGIN
FOR I IN C1 LOOP
DBMS_OUTPUT.PUT_LINE(i.comm);
END LOOP;
IF null is null then
raise excep;
else null;
end if;
EXCEPTION
when excep then
null;
DBMS_OUTPUT.PUT_LINE('COMMISION IS NULL');
END;
3.7: Write a PL/SQL block to drop any user defined table.
CREATE OR REPLACE PROCEDURE dropit (ttype in varchar2, table_name in varchar2) AS
BEGIN
EXECUTE IMMEDIATE 'DROP ' ||ttype||' '||table_name;
END;
/
exec dropit('table','emp_copy');
/
select * from emp_copy;
3.1: Modify the programs created in Lab2 to implement Exception Handling
3.2 The following PL/SQL block attempts to calculate bonus of staff for a given MGR_CODE. Bonus is to be considered as twice of salary. Though Exception Handling has been implemented but block is unable to handle the same.
Debug and verify the current behavior to trace the problem.
DECLARE
V_BONUS V_SAL%TYPE;
V_SAL STAFF_MASTER.STAFF_SAL%TYPE;
BEGIN
SELECT STAFF_SAL INTO V_SAL
FROM STAFF_MASTER
WHERE MGR_CODE=100006;
V_BONUS:=2*V_SAL;
DBMS_OUTPUT.PUT_LINE('STAFF SALARY IS ' || V_SAL);
DBMS_OUTPUT.PUT_LINE('STAFF BONUS IS ' || V_BONUS);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('GIVEN CODE IS NOT VALID.ENTER VALID CODE');
END;
Example 3: PL/SQL block
DECLARE
V_BONUS number(10);
V_SAL STAFF_MASTER.STAFF_SAL%TYPE;
BEGIN
SELECT STAFF_SAL INTO V_SAL
FROM STAFF_MASTER
WHERE MGR_CODE=100006;
V_BONUS:=2*V_SAL;
DBMS_OUTPUT.PUT_LINE('STAFF SALARY IS ' || V_SAL);
DBMS_OUTPUT.PUT_LINE('STAFF BONUS IS ' || V_BONUS);
EXCEPTION
WHEN too_many_rows THEN
DBMS_OUTPUT.PUT_LINE('GIVEN CODE IS NOT VALID.ENTER VALID CODE');
END;
3.3 Rewrite the above block to achieve the requirement.
DECLARE
CURSOR c1 is SELECT STAFF_SAL, STAFF_SAL*2 "STAFF_BONUS"
FROM STAFF_MASTER
WHERE MGR_CODE=100006;
BEGIN
FOR I IN C1 LOOP
DBMS_OUTPUT.PUT_LINE('STAFF SALARY IS ' || I.STAFF_SAL);
DBMS_OUTPUT.PUT_LINE('STAFF BONUS IS ' || I.STAFF_BONUS);
END LOOP;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('GIVEN CODE IS NOT VALID.ENTER VALID CODE');
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE('TOO MANY ROWS');
END;
3.4
Predict the output of the following block ? What corrections would be needed to make it more efficient?
BEGIN
DECLARE
fname emp.ename%TYPE;
BEGIN
SELECT ename INTO fname
FROM emp
WHERE 1=2;
DBMS_OUTPUT.PUT_LINE('This statement will print');
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Some inner block error');
END;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('No data found in fname');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Some outer block error');
END;
BEGIN
DECLARE
CURSOR c1 is SELECT ename FROM emp WHERE 1=2;
fname emp.ename%TYPE;
BEGIN
OPEN C1;
FETCH C1 INTO fname;
DBMS_OUTPUT.PUT_LINE('This statement will print');
CLOSE C1;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Some inner block error');
END;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('No data found in fname');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Some outer block error');
END;
3.5 Debug the above block to trace the flow of control.
Additionally one can make appropriate changes in Select statement defined in the
block to check the flow.
3.6: Write a PL/SQL program to check for the commission for an employee no 7369. If no commission exists, then display the error message. Use Exceptions.
DECLARE
CURSOR C1 IS SELECT comm
FROM emp
WHERE empno=7369;
excep EXCEPTION;
BEGIN
FOR I IN C1 LOOP
DBMS_OUTPUT.PUT_LINE(i.comm);
END LOOP;
IF null is null then
raise excep;
else null;
end if;
EXCEPTION
when excep then
null;
DBMS_OUTPUT.PUT_LINE('COMMISION IS NULL');
END;
3.7: Write a PL/SQL block to drop any user defined table.
CREATE OR REPLACE PROCEDURE dropit (ttype in varchar2, table_name in varchar2) AS
BEGIN
EXECUTE IMMEDIATE 'DROP ' ||ttype||' '||table_name;
END;
/
exec dropit('table','emp_copy');
/
select * from emp_copy;
3.1: Modify the programs created in Lab2 to implement Exception Handling
3.2 The following PL/SQL block attempts to calculate bonus of staff for a given MGR_CODE. Bonus is to be considered as twice of salary. Though Exception Handling has been implemented but block is unable to handle the same.
Debug and verify the current behavior to trace the problem.
DECLARE
V_BONUS V_SAL%TYPE;
V_SAL STAFF_MASTER.STAFF_SAL%TYPE;
BEGIN
SELECT STAFF_SAL INTO V_SAL
FROM STAFF_MASTER
WHERE MGR_CODE=100006;
V_BONUS:=2*V_SAL;
DBMS_OUTPUT.PUT_LINE('STAFF SALARY IS ' || V_SAL);
DBMS_OUTPUT.PUT_LINE('STAFF BONUS IS ' || V_BONUS);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('GIVEN CODE IS NOT VALID.ENTER VALID CODE');
END;
Example 3: PL/SQL block
DECLARE
V_BONUS number(10);
V_SAL STAFF_MASTER.STAFF_SAL%TYPE;
BEGIN
SELECT STAFF_SAL INTO V_SAL
FROM STAFF_MASTER
WHERE MGR_CODE=100006;
V_BONUS:=2*V_SAL;
DBMS_OUTPUT.PUT_LINE('STAFF SALARY IS ' || V_SAL);
DBMS_OUTPUT.PUT_LINE('STAFF BONUS IS ' || V_BONUS);
EXCEPTION
WHEN too_many_rows THEN
DBMS_OUTPUT.PUT_LINE('GIVEN CODE IS NOT VALID.ENTER VALID CODE');
END;
3.3 Rewrite the above block to achieve the requirement.
DECLARE
CURSOR c1 is SELECT STAFF_SAL, STAFF_SAL*2 "STAFF_BONUS"
FROM STAFF_MASTER
WHERE MGR_CODE=100006;
BEGIN
FOR I IN C1 LOOP
DBMS_OUTPUT.PUT_LINE('STAFF SALARY IS ' || I.STAFF_SAL);
DBMS_OUTPUT.PUT_LINE('STAFF BONUS IS ' || I.STAFF_BONUS);
END LOOP;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('GIVEN CODE IS NOT VALID.ENTER VALID CODE');
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE('TOO MANY ROWS');
END;
3.4
Predict the output of the following block ? What corrections would be needed to make it more efficient?
BEGIN
DECLARE
fname emp.ename%TYPE;
BEGIN
SELECT ename INTO fname
FROM emp
WHERE 1=2;
DBMS_OUTPUT.PUT_LINE('This statement will print');
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Some inner block error');
END;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('No data found in fname');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Some outer block error');
END;
BEGIN
DECLARE
CURSOR c1 is SELECT ename FROM emp WHERE 1=2;
fname emp.ename%TYPE;
BEGIN
OPEN C1;
FETCH C1 INTO fname;
DBMS_OUTPUT.PUT_LINE('This statement will print');
CLOSE C1;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Some inner block error');
END;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('No data found in fname');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Some outer block error');
END;
3.5 Debug the above block to trace the flow of control.
Additionally one can make appropriate changes in Select statement defined in the
block to check the flow.
3.6: Write a PL/SQL program to check for the commission for an employee no 7369. If no commission exists, then display the error message. Use Exceptions.
DECLARE
CURSOR C1 IS SELECT comm
FROM emp
WHERE empno=7369;
excep EXCEPTION;
BEGIN
FOR I IN C1 LOOP
DBMS_OUTPUT.PUT_LINE(i.comm);
END LOOP;
IF null is null then
raise excep;
else null;
end if;
EXCEPTION
when excep then
null;
DBMS_OUTPUT.PUT_LINE('COMMISION IS NULL');
END;
3.7: Write a PL/SQL block to drop any user defined table.
CREATE OR REPLACE PROCEDURE dropit (ttype in varchar2, table_name in varchar2) AS
BEGIN
EXECUTE IMMEDIATE 'DROP ' ||ttype||' '||table_name;
END;
/
exec dropit('table','emp_copy');
/
select * from emp_copy;