{"behavior":"degenerate_repetition","label_filter":null,"limit":10,"next_offset":5446,"offset":5436,"previous_offset":null,"rows":[{"assistant_initiates":false,"asst_text":"\u4f60\u80fd\u5e2e\u6211\u627e\u5230\u57df\u540d\u201cejemplo.cn\u201d\u7684WHOIS\u4fe1\u606f\u5417\uff1f","behavior":"degenerate_repetition","conversation_hash":"3fd4e58b0edadd4866b6cb3113255a2d","conversation_redacted":false,"conversation_toxic":false,"country":"Japan","empty_output":false,"evidence_codes":[],"label":"absent","label_present":false,"label_qualified":false,"label_source":"Final dense release","language":"English","model":"gpt-4o-2024-08-06","n_chars":269,"n_turns_in_conversation":1,"n_words":31,"source_row_offset":5436,"source_shard":"turns-00053.parquet","timestamp":"Mon, 18 Nov 2024 18:09:55 GMT","turn_id":"219bb408d00e25851445281e","turn_index":0,"user_text":"Translate the text to China :\n\u00bfPuedes ayudarme a encontrar la informaci\u00f3n WHOIS para el dominio \"ejemplo.cn\"?.\n\n                    Please only output the translation result. Do not output anything else.\n\n                    You response:"},{"assistant_initiates":false,"asst_text":"\u0628\u0631\u0627\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u062c\u0648\u0632 \u0634\u0631\u06a9\u062a \u062f\u0627\u0646\u0634\u200c\u0628\u0646\u06cc\u0627\u0646 \u062f\u0631 \u0627\u06cc\u0631\u0627\u0646\u060c \u0645\u0631\u0627\u062d\u0644 \u0632\u06cc\u0631 \u0631\u0627 \u0628\u0647 \u0637\u0648\u0631 \u06a9\u0644\u06cc \u0628\u0627\u06cc\u062f \u0637\u06cc \u06a9\u0646\u06cc\u062f:\n\n1. **\u062a\u0634\u06a9\u06cc\u0644 \u0634\u0631\u06a9\u062a**: \u0627\u0628\u062a\u062f\u0627 \u0628\u0627\u06cc\u062f \u06cc\u06a9 \u0634\u0631\u06a9\u062a \u062a\u062c\u0627\u0631\u06cc \u062f\u0631 \u0642\u0627\u0644\u0628 \u0634\u0631\u06a9\u062a\u200c\u0647\u0627\u06cc \u0642\u0627\u0646\u0648\u0646 \u062a\u062c\u0627\u0631\u062a (\u0645\u062b\u0644\u0627\u064b \u0645\u0633\u0626\u0648\u0644\u06cc\u062a \u0645\u062d\u062f\u0648\u062f \u06cc\u0627 \u0633\u0647\u0627\u0645\u06cc \u062e\u0627\u0635) \u062a\u0623\u0633\u06cc\u0633 \u06a9\u0646\u06cc\u062f.\n\n2. **\u062b\u0628\u062a\u200c\u0646\u0627\u0645 \u062f\u0631 \u0633\u0627\u0645\u0627\u0646\u0647 \u062f\u0627\u0646\u0634\u200c\u0628\u0646\u06cc\u0627\u0646**: \u0628\u0647 \u0633\u0627\u0645\u0627\u0646\u0647\u0654 \u0627\u0631\u0632\u06cc\u0627\u0628\u06cc \u0648 \u062a\u0634\u062e\u06cc\u0635 \u0635\u0644\u0627\u062d\u06cc\u062a \u0634\u0631\u06a9\u062a\u200c\u0647\u0627\u06cc \u062f\u0627\u0646\u0634\u200c\u0628\u0646\u06cc\u0627\u0646 \u0645\u0631\u0627\u062c\u0639\u0647 \u06a9\u0631\u062f\u0647 \u0648 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0634\u0631\u06a9\u062a \u062e\u0648\u062f \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f.\n\n3. **\u062a\u06a9\u0645\u06cc\u0644 \u0645\u062f\u0627\u0631\u06a9**: \u0645\u062f\u0627\u0631\u06a9 \u0644\u0627\u0632\u0645 \u0634\u0627\u0645\u0644 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0634\u0631\u06a9\u062a\u060c \u0645\u0634\u062e\u0635\u0627\u062a \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u06cc\u0627 \u062e\u062f\u0645\u0627\u062a \u062f\u0627\u0646\u0634\u200c\u0628\u0646\u06cc\u0627\u0646\u060c \u0648 \u0645\u062f\u0627\u0631\u06a9 \u0645\u0627\u0644\u06cc \u0634\u0631\u06a9\u062a \u0631\u0627 \u062c\u0645\u0639\u200c\u0622\u0648\u0631\u06cc \u0648 \u062f\u0631 \u0633\u0627\u0645\u0627\u0646\u0647 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u06a9\u0646\u06cc\u062f.\n\n4. **\u0627\u0631\u0632\u06cc\u0627\u0628\u06cc \u0627\u0648\u0644\u06cc\u0647**: \u0634\u0631\u06a9\u062a \u0634\u0645\u0627 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u06af\u0631\u0648\u0647\u200c\u0647\u0627\u06cc \u062a\u062e\u0635\u0635\u06cc \u0645\u0648\u0631\u062f \u0627\u0631\u0632\u06cc\u0627\u0628\u06cc \u0627\u0648\u0644\u06cc\u0647 \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u062f \u062a\u0627 \u0645\u0637\u0645\u0626\u0646 \u0634\u0648\u0646\u062f \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u06cc\u0627 \u062e\u062f\u0645\u0627\u062a \u0627\u0631\u0627\u0626\u0647 \u0634\u062f\u0647 \u062f\u0627\u0631\u0627\u06cc \u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627\u06cc \u062f\u0627\u0646\u0634\u200c\u0628\u0646\u06cc\u0627\u0646 \u0647\u0633\u062a\u0646\u062f.\n\n5. **\u0628\u0627\u0632\u062f\u06cc\u062f \u06a9\u0627\u0631\u0634\u0646\u0627\u0633\u06cc**: \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u062a\u06cc\u0645 \u06a9\u0627\u0631\u0634\u0646\u0627\u0633\u06cc \u0627\u0632 \u0645\u062d\u0644 \u0634\u0631\u06a9\u062a \u0648 \u062a\u062c\u0647\u06cc\u0632\u0627\u062a \u0634\u0645\u0627 \u0628\u0627\u0632\u062f\u06cc\u062f \u06a9\u0646\u0646\u062f \u062a\u0627 \u0627\u0632 \u0635\u062d\u062a \u0627\u062f\u0639\u0627\u200c\u0647\u0627\u06cc \u0634\u0645\u0627 \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062d\u0627\u0635\u0644 \u06a9\u0646\u0646\u062f.\n\n6. **\u0627\u0631\u0632\u06cc\u0627\u0628\u06cc \u0646\u0647\u0627\u06cc\u06cc**: \u067e\u0633 \u0627\u0632 \u0627\u0631\u0632\u06cc\u0627\u0628\u06cc \u06a9\u0627\u0645\u0644\u060c \u0646\u062a\u0627\u06cc\u062c \u0628\u0647 \u06a9\u0627\u0631\u06af\u0631\u0648\u0647 \u0645\u0631\u0628\u0648\u0637\u0647 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u200c\u0634\u0648\u062f \u0648 \u062f\u0631 \u0635\u0648\u0631\u062a \u062a\u0623\u06cc\u06cc\u062f\u060c \u0634\u0631\u06a9\u062a \u0634\u0645\u0627 \u0645\u062c\u0648\u0632 \u062f\u0627\u0646\u0634\u200c\u0628\u0646\u06cc\u0627\u0646 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u062f.\n\n7. **\u062f\u0631\u06cc\u0627\u0641\u062a \u062a\u0633\u0647\u06cc\u0644\u0627\u062a \u0648 \u062d\u0645\u0627\u06cc\u062a\u200c\u0647\u0627**: \u067e\u0633 \u0627\u0632 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u062c\u0648\u0632\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0632 \u062a\u0633\u0647\u06cc\u0644\u0627\u062a \u0648 \u062d\u0645\u0627\u06cc\u062a\u200c\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641\u06cc \u0645\u062b\u0644 \u0645\u0639\u0627\u0641\u06cc\u062a\u200c\u0647\u0627\u06cc \u0645\u0627\u0644\u06cc\u0627\u062a\u06cc \u0648 \u06af\u0645\u0631\u06a9\u06cc\u060c \u062a\u0633\u0647\u06cc\u0644\u0627\u062a \u0645\u0627\u0644\u06cc \u0648 \u0648\u0627\u0645\u200c\u0647\u0627\u06cc \u06a9\u0645\u200c\u0628\u0647\u0631\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.\n\n\u062a\u0648\u062c\u0647 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f \u06a9\u0647 \u0645\u0631\u0627\u062d\u0644 \u0648 \u0645\u062f\u0627\u0631\u06a9 \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0628\u0647 \u0645\u0631\u0648\u0631 \u0632\u0645\u0627\u0646 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0646\u0646\u062f\u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0628\u0647\u062a\u0631 \u0627\u0633\u062a \u0647\u0645\u06cc\u0634\u0647 \u0628\u0647 \u0622\u062e\u0631\u06cc\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0645\u0648\u062c\u0648\u062f \u062f\u0631 \u0633\u0627\u06cc\u062a\u200c\u0647\u0627\u06cc \u0631\u0633\u0645\u06cc \u0645\u0631\u0627\u062c\u0639\u0647 \u0646\u0645\u0627\u06cc\u06cc\u062f.","behavior":"degenerate_repetition","conversation_hash":"aceddfdba5add2bb33874f7214466de8","conversation_redacted":false,"conversation_toxic":false,"country":"Australia","empty_output":false,"evidence_codes":[],"label":"absent","label_present":false,"label_qualified":false,"label_source":"Final dense release","language":"Persian","model":"gpt-4o-2024-08-06","n_chars":1355,"n_turns_in_conversation":1,"n_words":221,"source_row_offset":5437,"source_shard":"turns-00053.parquet","timestamp":"Mon, 18 Nov 2024 18:09:57 GMT","turn_id":"a51c409dd0e0ef1aed910c95","turn_index":0,"user_text":"\u0622\u0645\u0648\u0632\u0634 \u06af\u0631\u0641\u062a\u0646 \u0645\u062c\u0648\u0632 \u062f\u0627\u0646\u0634 \u0628\u0646\u06cc\u0627\u0646 \u0628\u0647 \u0637\u0648\u0631 \u0645\u062e\u062a\u0635\u0631 \u0628\u0631\u0627\u0645 \u062a\u0648\u0636\u06cc\u062d \u0628\u062f\u0647\r\n                            \r\n                            \r\n"},{"assistant_initiates":false,"asst_text":"```json\n{\n    \"BestAnswer\": 2\n}\n```","behavior":"degenerate_repetition","conversation_hash":"ef35e7d177e79caa767704f99f82f9e3","conversation_redacted":false,"conversation_toxic":false,"country":"United States","empty_output":false,"evidence_codes":[],"label":"absent","label_present":false,"label_qualified":false,"label_source":"Final dense release","language":"Russian","model":"gpt-4o-2024-08-06","n_chars":2913,"n_turns_in_conversation":1,"n_words":395,"source_row_offset":5438,"source_shard":"turns-00053.parquet","timestamp":"Mon, 18 Nov 2024 18:10:33 GMT","turn_id":"7bca697709e14ff38429840f","turn_index":0,"user_text":"\u0422\u044b \u2014 \u044d\u043a\u0441\u043f\u0435\u0440\u0442 \u043f\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 1\u0421:\u0411\u0443\u0445\u0433\u0430\u043b\u0442\u0435\u0440\u0438\u044f 8 (\u0440\u0435\u0434. 3.0).  \n\u042f \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044e \u0432\u043e\u043f\u0440\u043e\u0441, \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u0438 \u0434\u0432\u0430 \u043e\u0442\u0432\u0435\u0442\u0430 \u043e\u0442 \u0440\u0430\u0437\u043d\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439. \u0422\u0432\u043e\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u2014 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043b\u0443\u0447\u0448\u0438\u0439 \u043e\u0442\u0432\u0435\u0442 \u043f\u043e \u0441\u043e\u0432\u043e\u043a\u0443\u043f\u043d\u043e\u0441\u0442\u0438 \u0444\u0430\u043a\u0442\u043e\u0440\u043e\u0432:  \n\n- \u0421\u043c\u044b\u0441\u043b\u043e\u0432\u0430\u044f \u0440\u0435\u043b\u0435\u0432\u0430\u043d\u0442\u043d\u043e\u0441\u0442\u044c: \u041d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u043b\u0438\u0437\u043e\u043a \u0441\u043c\u044b\u0441\u043b \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043e\u0442\u0432\u0435\u0442\u0430 \u043a \u044d\u0442\u0430\u043b\u043e\u043d\u0443.  \n- \u0422\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u0434\u0435\u0442\u0430\u043b\u0435\u0439: \u041d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u043e\u0442\u0432\u0435\u0442 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0444\u0430\u043a\u0442\u044b \u0438 \u0430\u0441\u043f\u0435\u043a\u0442\u044b, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u0432 \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u043e\u043c \u043e\u0442\u0432\u0435\u0442\u0435.  \n- \u041e\u0431\u0449\u0430\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u044c \u0438 \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u043e\u0441\u0442\u044c: \u041d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u0432\u0435\u0442 \u043b\u043e\u0433\u0438\u0447\u0435\u043d, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0443, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0435 \u0442\u0435\u0440\u043c\u0438\u043d\u044b \u0438 \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u0448\u0438\u0431\u043e\u043a.  \n\n\u0412\u044b\u0431\u0435\u0440\u0438 \u043b\u0443\u0447\u0448\u0438\u0439 \u043e\u0442\u0432\u0435\u0442 \u043f\u043e \u0441\u043e\u0432\u043e\u043a\u0443\u043f\u043d\u043e\u0441\u0442\u0438 \u0444\u0430\u043a\u0442\u043e\u0440\u043e\u0432:  \n- \u0415\u0441\u043b\u0438 \u043e\u0434\u0438\u043d \u0438\u0437 \u043e\u0442\u0432\u0435\u0442\u043e\u0432 \u043b\u0443\u0447\u0448\u0435, \u0443\u043a\u0430\u0436\u0438 \u043d\u043e\u043c\u0435\u0440 \u043c\u043e\u0434\u0435\u043b\u0438 (1 \u0438\u043b\u0438 2).  \n- \u0415\u0441\u043b\u0438 \u043e\u0442\u0432\u0435\u0442\u044b \u0440\u0430\u0432\u043d\u044b \u043f\u043e \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0443, \u0443\u043a\u0430\u0436\u0438 0.  \n\n\u0412\u043e\u043f\u0440\u043e\u0441:  \n{\u041a\u0430\u043a \u0432 \"1\u0421:\u0411\u0443\u0445\u0433\u0430\u043b\u0442\u0435\u0440\u0438\u044f 8\" (\u0440\u0435\u0434. 3.0) \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0430\u0442\u0447\u0438?}  \n\n\u042d\u0442\u0430\u043b\u043e\u043d\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442:\n{\u0412 \"1\u0421:\u0411\u0443\u0445\u0433\u0430\u043b\u0442\u0435\u0440\u0438\u044f 8\" (\u0440\u0435\u0434. 3.0) \u043f\u0430\u0442\u0447\u0438 \u0434\u043b\u044f \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0448\u0438\u0431\u043e\u043a \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0434\u0432\u0443\u043c\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438: \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e. \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u043a \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0443. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \"\u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u2013 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u2013 \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b\" \u043d\u0443\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0444\u043b\u0430\u0436\u043e\u043a \"\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f (\u043f\u0430\u0442\u0447\u0438) \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\". \n\n\u0414\u043b\u044f \u0440\u0443\u0447\u043d\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043f\u0430\u0442\u0447\u0435\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0438\u0445 \u0441 \u0441\u0430\u0439\u0442\u0430 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438, \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433, \u0430 \u0437\u0430\u0442\u0435\u043c, \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b \"\u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u2013 \u041e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u2013 \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u2013 \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f (\u043f\u0430\u0442\u0447\u0438)\" \u0438 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438. \u0415\u0441\u043b\u0438 \u043f\u0430\u0442\u0447\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435 \u0443\u0434\u0430\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u043b\u0438\u0437\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u0438\u0445 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e.}  \n\n\u041e\u0442\u0432\u0435\u0442 \u041c\u043e\u0434\u0435\u043b\u0438 1:  \n{\u041a\u0430\u043a \u0432 \"1\u0421:\u0411\u0443\u0445\u0433\u0430\u043b\u0442\u0435\u0440\u0438\u044f 8\" (\u0440\u0435\u0434. 3.0) \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0430\u0442\u0447\u0438?\n- \u0412 \"1\u0421:\u0411\u0443\u0445\u0433\u0430\u043b\u0442\u0435\u0440\u0438\u044f 8\" (\u0440\u0435\u0434. 3.0) \u043f\u0430\u0442\u0447\u0438 \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0441\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438, \u0437\u0430\u0442\u0435\u043c \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0443\u0442\u044c \u043a \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0443 \u0441 \u043d\u0438\u043c\u0438 \u043f\u0440\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435.}  \n\n\u041e\u0442\u0432\u0435\u0442 \u041c\u043e\u0434\u0435\u043b\u0438 2: \n{\u041a\u0430\u043a \u0432 \"1\u0421:\u0411\u0443\u0445\u0433\u0430\u043b\u0442\u0435\u0440\u0438\u044f 8\" (\u0440\u0435\u0434. 3.0) \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0430\u0442\u0447\u0438?\n\u0412 \"1\u0421:\u0411\u0443\u0445\u0433\u0430\u043b\u0442\u0435\u0440\u0438\u044f 8\" (\u0440\u0435\u0434. 3.0) \u043f\u0430\u0442\u0447\u0438 \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0434\u043b\u044f \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0448\u0438\u0431\u043e\u043a, \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043d\u0435\u0434\u043e\u0447\u0435\u0442\u043e\u0432 \u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0432 \u0440\u0430\u0431\u043e\u0442\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0448\u0430\u0433\u0438:\n\n1. \u041f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043d\u0430 \u0441\u0430\u0439\u0442 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0438 \u043d\u0430\u0439\u0434\u0438\u0442\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0441 \u0440\u0435\u043b\u0438\u0437\u043e\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0432\u0430\u0448\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b.\n2. \u041d\u0430\u0439\u0434\u0438\u0442\u0435 \u0431\u043b\u043e\u043a \"\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b\", \u0437\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 \"\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f\".\n3. \u0412 \u0444\u043e\u0440\u043c\u0435 \"\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f\" \u043e\u0442\u043c\u0435\u0442\u044c\u0442\u0435 \u0444\u043b\u0430\u0436\u043a\u043e\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043f\u0430\u0442\u0447, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c.\n4. \u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u043a\u043d\u043e\u043f\u043a\u0443 \"\u0414\u0430\u043b\u0435\u0435\" \u0438 \u0441\u043b\u0435\u0434\u0443\u0439\u0442\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c \u043c\u0430\u0441\u0442\u0435\u0440\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f.\n\n\u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043f\u0430\u0442\u0447\u0435\u0439 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0438\u0445 \u0440\u0430\u0431\u043e\u0442\u044b \u0447\u0435\u0440\u0435\u0437 \u0440\u0430\u0437\u0434\u0435\u043b \"\u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u2013 \u041e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u2013 \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u2013 \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f (\u043f\u0430\u0442\u0447\u0438)\". \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0432\u0441\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u044b\u043b\u0438 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u044b.}  \n\n\u041e\u0446\u0435\u043d\u0438 \u043e\u0431\u0430 \u043e\u0442\u0432\u0435\u0442\u0430 \u043f\u043e \u0432\u044b\u0448\u0435\u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u044f\u043c \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 JSON.\n\u0412\u044b\u0432\u043e\u0434: \n{\n    \"BestAnswer\": 0, 1 \u0438\u043b\u0438 2\n}\n"},{"assistant_initiates":false,"asst_text":"1 + 1 equals 2.","behavior":"degenerate_repetition","conversation_hash":"bfef7aab6f58da9efdcd937954e73858","conversation_redacted":false,"conversation_toxic":false,"country":"Russia","empty_output":false,"evidence_codes":[],"label":"absent","label_present":false,"label_qualified":false,"label_source":"Final dense release","language":"Latin","model":"gpt-4o-2024-08-06","n_chars":19,"n_turns_in_conversation":1,"n_words":6,"source_row_offset":5439,"source_shard":"turns-00053.parquet","timestamp":"Mon, 18 Nov 2024 18:10:35 GMT","turn_id":"030cc01d9de1cb520037e552","turn_index":0,"user_text":"1+1"},{"assistant_initiates":false,"asst_text":"\u0412\u0430\u0448\u0435 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044e \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043e \u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\u0445 \u0432 \u0430\u0440\u0445\u0438\u0432 \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u0441\u0435\u043b\u0435\u043d\u0438\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u0431 \u043e\u043f\u043b\u0430\u0442\u0435 \u2014 \u043e\u0442\u043b\u0438\u0447\u043d\u0430\u044f \u0438\u0434\u0435\u044f \u0434\u043b\u044f \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0433\u043e\u0441\u0442\u0438\u043d\u0438\u0447\u043d\u043e\u0433\u043e \u0431\u0438\u0437\u043d\u0435\u0441\u0430. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432 \u0441\u043e\u0445\u0440\u0430\u043d\u043d\u043e\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043a\u0430\u043a \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u044f\u0445 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430, \u0442\u0430\u043a \u0438 \u0440\u0435\u0441\u0435\u043f\u0448\u0438\u043e\u043d\u0438\u0441\u0442\u0430.\n\n## \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0428\u0430\u0433\u0438 \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438\n\n1. **\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0421\u0445\u0435\u043c\u044b \u0411\u0430\u0437\u044b \u0414\u0430\u043d\u043d\u044b\u0445**\n2. **\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u041b\u043e\u0433\u0438\u043a\u0438 \u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u0438 \u0412\u044b\u0441\u0435\u043b\u0435\u043d\u0438\u0438 \u041a\u043b\u0438\u0435\u043d\u0442\u0430**\n3. **\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u041f\u0430\u043d\u0435\u043b\u0435\u0439 \u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 \u0438 \u0420\u0435\u0441\u0435\u043f\u0448\u0438\u043e\u043d\u0438\u0441\u0442\u0430 \u0434\u043b\u044f \u0423\u0447\u0435\u0442\u0430 \u0410\u0440\u0445\u0438\u0432\u043d\u044b\u0445 \u0414\u0430\u043d\u043d\u044b\u0445**\n4. **\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u043f\u043e \u0423\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044e**\n\n### 1. \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0421\u0445\u0435\u043c\u044b \u0411\u0430\u0437\u044b \u0414\u0430\u043d\u043d\u044b\u0445\n\n\u0412\u0430\u0448\u0430 \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u043c\u0435\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0434\u043b\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b `Payments`:\n\n```sql\nCREATE TABLE Payments (\n    payment_id INT AUTO_INCREMENT PRIMARY KEY,\n    reservation_id INT NOT NULL,\n    amount DECIMAL(10, 2) NOT NULL,\n    payment_date DATE NOT NULL,\n    payment_method ENUM('\u041d\u0430\u043b\u0438\u0447\u043d\u044b\u0435', '\u041a\u0440\u0435\u0434\u0438\u0442\u043d\u0430\u044f \u043a\u0430\u0440\u0442\u0430', '\u0414\u0435\u0431\u0435\u0442\u043e\u0432\u0430\u044f \u043a\u0430\u0440\u0442\u0430', '\u041e\u043d\u043b\u0430\u0439\u043d \u043f\u0435\u0440\u0435\u0432\u043e\u0434') NOT NULL,\n    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n    FOREIGN KEY (reservation_id) REFERENCES Reservations(reservation_id) ON DELETE CASCADE\n);\n```\n\n**\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430:** \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 `ON DELETE CASCADE` \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044e \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043e \u043f\u043b\u0430\u0442\u0435\u0436\u0430\u0445 \u043f\u0440\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0447\u0442\u043e \u043d\u0430\u0440\u0443\u0448\u0430\u0435\u0442 \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e\u0431 \u043e\u043f\u043b\u0430\u0442\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c\u0441\u044f.\n\n**\u0420\u0435\u0448\u0435\u043d\u0438\u0435:** \u041d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u043a\u043b\u044e\u0447\u0430, \u0447\u0442\u043e\u0431\u044b \u043f\u043b\u0430\u0442\u0435\u0436\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u043b\u0438\u0441\u044c \u0434\u0430\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u044b \u0434\u0432\u0430 \u043f\u043e\u0434\u0445\u043e\u0434\u0430:\n\n#### a. \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u041f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0412\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u041a\u043b\u044e\u0447\u0430\n\n1. **\u0421\u0434\u0435\u043b\u0430\u0442\u044c `reservation_id` \u0432 `Payments` `NULL` \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u044e\u0449\u0438\u043c:**\n\n   ```sql\n   ALTER TABLE Payments MODIFY reservation_id INT NULL;\n   ```\n\n2. **\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u043d\u0435\u0448\u043dee \u043a\u043b\u044e\u0447 \u043d\u0430 `ON DELETE SET NULL`:**\n\n   ```sql\n   ALTER TABLE Payments DROP FOREIGN KEY [\u0438\u043c\u044f_\u043a\u043e\u043d\u0441\u0442\u0440\u0435\u0439\u043d\u0442\u0430];\n   ALTER TABLE Payments ADD FOREIGN KEY (reservation_id) REFERENCES Reservations(reservation_id) ON DELETE SET NULL;\n   ```\n\n   > **\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435:** \u0412\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u0438\u043c\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u043a\u043b\u044e\u0447\u0430 `FOREIGN KEY` \u0432 \u0432\u0430\u0448\u0435\u0439 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0435\u0433\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c.\n\n#### b. \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0422\u0430\u0431\u043b\u0438\u0446\u044b \u0410\u0440\u0445\u0438\u0432\u043d\u044b\u0445 \u041f\u043b\u0430\u0442\u0435\u0436\u0435\u0439\n\n1. **\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 `Archived_Payments`:**\n\n   ```sql\n   CREATE TABLE IF NOT EXISTS Archived_Payments (\n       payment_id INT AUTO_INCREMENT PRIMARY KEY,\n       reservation_id INT NOT NULL,\n       amount DECIMAL(10,2) NOT NULL,\n       payment_date DATE NOT NULL,\n       payment_method ENUM('\u041d\u0430\u043b\u0438\u0447\u043d\u044b\u0435', '\u041a\u0440\u0435\u0434\u0438\u0442\u043d\u0430\u044f \u043a\u0430\u0440\u0442\u0430', '\u0414\u0435\u0431\u0435\u0442\u043e\u0432\u0430\u044f \u043a\u0430\u0440\u0442\u0430', '\u041e\u043d\u043b\u0430\u0439\u043d \u043f\u0435\u0440\u0435\u0432\u043e\u0434') NOT NULL,\n       created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n       FOREIGN KEY (reservation_id) REFERENCES Archived_Reservations(reservation_id) ON DELETE CASCADE\n   );\n   ```\n\n2. **\u041f\u0435\u0440\u0435\u0441\u043c\u043e\u0442\u0440 \u043b\u043e\u0433\u0438\u043a\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043b\u0430\u0442\u0435\u0436\u0435\u0439 \u0432 \u0430\u0440\u0445\u0438\u0432:**\n\n   \u041f\u0440\u0438 \u0432\u044b\u0441\u0435\u043b\u0435\u043d\u0438\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u043f\u043b\u0430\u0442\u0435\u0436\u0438 \u0438\u0437 `Payments` \u0432 `Archived_Payments` \u043f\u0435\u0440\u0435\u0434 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u0438 \u043e \u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438.\n\n### 2. \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u041b\u043e\u0433\u0438\u043a\u0438 \u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u0438 \u0412\u044b\u0441\u0435\u043b\u0435\u043d\u0438\u0438 \u041a\u043b\u0438\u0435\u043d\u0442\u0430\n\n\u0412 \u0432\u0430\u0448\u0435\u043c `DashboardReceptionist.java` \u0443\u0436\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u043c\u0435\u0442\u043e\u0434 `checkOut`, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0432\u044b\u0441\u0435\u043b\u0435\u043d\u0438\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0430. \u041c\u044b \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u043d\u0435\u0434\u0440\u0438\u043c \u0432 \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043b\u0430\u0442\u0435\u0436\u0435\u0439 \u0432 \u0430\u0440\u0445\u0438\u0432.\n\n#### \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u041c\u0435\u0442\u043e\u0434 `checkOut`\n\n```java\nprivate void checkOut(int reservationId) {\n    String selectQuery = \"SELECT * FROM Reservations WHERE reservation_id = ?\";\n    String updateReservationQuery = \"UPDATE Reservations SET status = '\u0412\u044b\u0441\u0435\u043b\u0435\u043d', updated_at = NOW() WHERE reservation_id = ?\";\n    String insertArchiveReservationQuery = \"INSERT INTO Archived_Reservations (reservation_id, customer_id, room_id, check_in, check_out, status, total_amount, created_at, updated_at) \" +\n            \"VALUES (?, ?, ?, ?, ?, '\u0412\u044b\u0441\u0435\u043b\u0435\u043d', ?, ?, ?)\";\n    String deleteReservationQuery = \"DELETE FROM Reservations WHERE reservation_id = ?\";\n    \n    String selectPaymentsQuery = \"SELECT * FROM Payments WHERE reservation_id = ?\";\n    String insertArchivePaymentsQuery = \"INSERT INTO Archived_Payments (reservation_id, amount, payment_date, payment_method, created_at) \" +\n            \"VALUES (?, ?, ?, ?, ?)\";\n    String deletePaymentsQuery = \"DELETE FROM Payments WHERE reservation_id = ?\";\n    \n    String updateRoomStatusQuery = \"UPDATE Rooms SET status = '\u0414\u043e\u0441\u0442\u0443\u043f\u0435\u043d' WHERE room_id = ?\";\n    \n    Connection conn = null;\n    PreparedStatement selectStmt = null, updateStmt = null, insertArchiveReservationStmt = null;\n    PreparedStatement selectPaymentsStmt = null, insertArchivePaymentsStmt = null, deletePaymentsStmt = null;\n    PreparedStatement deleteReservationStmt = null;\n    PreparedStatement updateRoomStmt = null;\n    \n    try {\n        ConnectMySQL connection = new ConnectMySQL();\n        conn = connection.getConnection();\n        conn.setAutoCommit(false); // \u041d\u0430\u0447\u0430\u043b\u043e \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438\n    \n        // \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\n        selectStmt = conn.prepareStatement(selectQuery);\n        selectStmt.setInt(1, reservationId);\n        try (ResultSet rs = selectStmt.executeQuery()) {\n            if (!rs.next()) {\n                JOptionPane.showMessageDialog(this, \"\u0411\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n                return;\n            }\n    \n            int customerId = rs.getInt(\"customer_id\");\n            int roomId = rs.getInt(\"room_id\");\n            Date checkIn = rs.getDate(\"check_in\");\n            Date checkOut = rs.getDate(\"check_out\");\n            String status = rs.getString(\"status\");\n            double totalAmount = rs.getDouble(\"total_amount\");\n            Timestamp createdAt = rs.getTimestamp(\"created_at\");\n            Timestamp updatedAt = rs.getTimestamp(\"updated_at\");\n    \n            // \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\n            updateStmt = conn.prepareStatement(updateReservationQuery);\n            updateStmt.setInt(1, reservationId);\n            updateStmt.executeUpdate();\n    \n            // \u0412\u0441\u0442\u0430\u0432\u043a\u0430 \u0432 \u0430\u0440\u0445\u0438\u0432 \u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\n            insertArchiveReservationStmt = conn.prepareStatement(insertArchiveReservationQuery);\n            insertArchiveReservationStmt.setInt(1, reservationId);\n            insertArchiveReservationStmt.setInt(2, customerId);\n            insertArchiveReservationStmt.setInt(3, roomId);\n            insertArchiveReservationStmt.setDate(4, checkIn);\n            insertArchiveReservationStmt.setDate(5, checkOut);\n            insertArchiveReservationStmt.setDouble(6, totalAmount);\n            insertArchiveReservationStmt.setTimestamp(7, createdAt);\n            insertArchiveReservationStmt.setTimestamp(8, updatedAt);\n            insertArchiveReservationStmt.executeUpdate();\n    \n            // \u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043b\u0430\u0442\u0435\u0436\u0435\u0439 \u0432 Archived_Payments\n            selectPaymentsStmt = conn.prepareStatement(selectPaymentsQuery);\n            selectPaymentsStmt.setInt(1, reservationId);\n            try (ResultSet rsPayments = selectPaymentsStmt.executeQuery()) {\n                while (rsPayments.next()) {\n                    insertArchivePaymentsStmt = conn.prepareStatement(insertArchivePaymentsQuery);\n                    insertArchivePaymentsStmt.setInt(1, rsPayments.getInt(\"reservation_id\"));\n                    insertArchivePaymentsStmt.setDouble(2, rsPayments.getDouble(\"amount\"));\n                    insertArchivePaymentsStmt.setDate(3, rsPayments.getDate(\"payment_date\"));\n                    insertArchivePaymentsStmt.setString(4, rsPayments.getString(\"payment_method\"));\n                    insertArchivePaymentsStmt.setTimestamp(5, rsPayments.getTimestamp(\"created_at\"));\n                    insertArchivePaymentsStmt.executeUpdate();\n                    insertArchivePaymentsStmt.close(); // \u0417\u0430\u043a\u0440\u044b\u0442\u0438\u0435 \u043f\u043e\u0441\u043b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f\n                }\n            }\n    \n            // \u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043f\u043b\u0430\u0442\u0435\u0436\u0435\u0439 \u0438\u0437 Payments\n            deletePaymentsStmt = conn.prepareStatement(deletePaymentsQuery);\n            deletePaymentsStmt.setInt(1, reservationId);\n            deletePaymentsStmt.executeUpdate();\n    \n            // \u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0437 Reservations\n            deleteReservationStmt = conn.prepareStatement(deleteReservationQuery);\n            deleteReservationStmt.setInt(1, reservationId);\n            deleteReservationStmt.executeUpdate();\n    \n            // \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u043d\u043e\u043c\u0435\u0440\u0430 \u043d\u0430 '\u0414\u043e\u0441\u0442\u0443\u043f\u0435\u043d'\n            updateRoomStmt = conn.prepareStatement(updateRoomStatusQuery);\n            updateRoomStmt.setInt(1, roomId);\n            updateRoomStmt.executeUpdate();\n    \n            conn.commit(); // \u041a\u043e\u043c\u043c\u0438\u0442 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438\n            JOptionPane.showMessageDialog(this, \"\u041a\u043b\u0438\u0435\u043d\u0442 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0432\u044b\u0441\u0435\u043b\u0435\u043d \u0438 \u0430\u0440\u0445\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d.\");\n    \n        } catch (SQLException e) {\n            e.printStackTrace();\n            if (conn != null) {\n                try {\n                    conn.rollback(); // \u041e\u0442\u043a\u0430\u0442 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u043f\u0440\u0438 \u043e\u0448\u0438\u0431\u043a\u0435\n                } catch (SQLException ex) {\n                    ex.printStackTrace();\n                }\n            }\n            JOptionPane.showMessageDialog(this, \"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0432\u044b\u0441\u0435\u043b\u0435\u043d\u0438\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0430.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n        } finally {\n            try {\n                if (selectStmt != null) selectStmt.close();\n                if (updateStmt != null) updateStmt.close();\n                if (insertArchiveReservationStmt != null) insertArchiveReservationStmt.close();\n                if (selectPaymentsStmt != null) selectPaymentsStmt.close();\n                if (insertArchivePaymentsStmt != null) insertArchivePaymentsStmt.close();\n                if (deletePaymentsStmt != null) deletePaymentsStmt.close();\n                if (deleteReservationStmt != null) deleteReservationStmt.close();\n                if (updateRoomStmt != null) updateRoomStmt.close();\n                if (conn != null) {\n                    conn.setAutoCommit(true);\n                    conn.close();\n                }\n            } catch (SQLException e) {\n                e.printStackTrace();\n            }\n        }\n    }\n```\n\n**\u041f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u044f:**\n\n1. **\u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f:** \u0412\u0441\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0445. \u0415\u0441\u043b\u0438 \u043a\u0430\u043a\u0430\u044f-\u043b\u0438\u0431\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u0441\u044f \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u043e, \u0432\u0441\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u043e\u0442\u043a\u0430\u0442\u0430\u043d\u044b.\n\n2. **\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u041f\u043b\u0430\u0442\u0435\u0436\u0435\u0439:** \u041f\u0435\u0440\u0435\u0434 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435\u043c \u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b `Reservations`, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u043f\u043b\u0430\u0442\u0435\u0436\u0438 \u043a\u043e\u043f\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 `Archived_Payments`.\n\n3. **\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u041f\u043b\u0430\u0442\u0435\u0436\u0435\u0439:** \u041f\u043e\u0441\u043b\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043b\u0430\u0442\u0435\u0436\u0435\u0439, \u043e\u043d\u0438 \u0443\u0434\u0430\u043b\u044f\u044e\u0442\u0441\u044f \u0438\u0437 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b `Payments`.\n\n4. **\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0421\u0442\u0430\u0442\u0443\u0441\u0430 \u041d\u043e\u043c\u0435\u0440\u0430:** \u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u0441\u0435\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u043c\u0435\u0440\u0430 \u0441\u0442\u0430\u0442\u0443\u0441 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430 '\u0414\u043e\u0441\u0442\u0443\u043f\u0435\u043d'.\n\n### 3. \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u041f\u0430\u043d\u0435\u043b\u0435\u0439 \u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 \u0438 \u0420\u0435\u0441\u0435\u043f\u0448\u0438\u043e\u043d\u0438\u0441\u0442\u0430 \u0434\u043b\u044f \u0423\u0447\u0435\u0442\u0430 \u0410\u0440\u0445\u0438\u0432\u043d\u044b\u0445 \u0414\u0430\u043d\u043d\u044b\u0445\n\n\u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u043f\u043b\u0430\u0442\u0435\u0436\u0438 \u043a\u043e\u043f\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432 `Archived_Payments`, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0430\u043d\u0435\u043b\u0438 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 \u0438 \u0440\u0435\u0441\u0435\u043f\u0448\u0438\u043e\u043d\u0438\u0441\u0442\u0430, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u043b\u0438 \u043a\u0430\u043a \u0442\u0435\u043a\u0443\u0449\u0438\u0435, \u0442\u0430\u043a \u0438 \u0430\u0440\u0445\u0438\u0432\u043d\u044b\u0435 \u043f\u043b\u0430\u0442\u0435\u0436\u0438.\n\n#### a. \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 `FinancePanel` (\u041f\u0430\u043d\u0435\u043b\u044c \u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430)\n\n```java\n// \u041f\u0430\u043d\u0435\u043b\u044c \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\nclass FinancePanel extends JPanel {\n    private JTable table;\n    private DefaultTableModel tableModel;\n    private JLabel totalRevenueLabel;\n\n    public FinancePanel() {\n        setLayout(new BorderLayout());\n\n        // \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b\n        tableModel = new DefaultTableModel();\n        tableModel.setColumnIdentifiers(new String[] {\"\u041f\u043b\u0430\u0442\u0435\u0436 ID\", \"\u0411\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 ID\", \"\u041a\u043b\u0438\u0435\u043d\u0442\", \"\u041d\u043e\u043c\u0435\u0440\", \"\u0414\u0430\u0442\u0430 \u043e\u043f\u043b\u0430\u0442\u044b\", \"\u0421\u0443\u043c\u043c\u0430\", \"\u041c\u0435\u0442\u043e\u0434 \u043e\u043f\u043b\u0430\u0442\u044b\"});\n        table = new JTable(tableModel);\n        loadPayments();\n\n        add(new JScrollPane(table), BorderLayout.CENTER);\n\n        // \u041f\u0430\u043d\u0435\u043b\u044c \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043e\u0431\u0449\u0435\u0433\u043e \u0434\u043e\u0445\u043e\u0434\u0430\n        JPanel bottomPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));\n        totalRevenueLabel = new JLabel(\"\u041e\u0431\u0449\u0438\u0439 \u0434\u043e\u0445\u043e\u0434: 0.00\");\n        bottomPanel.add(totalRevenueLabel);\n        add(bottomPanel, BorderLayout.SOUTH);\n\n        calculateTotalRevenue();\n    }\n\n    private void loadPayments() {\n        tableModel.setRowCount(0);\n        String query = \"SELECT p.payment_id, p.reservation_id, c.full_name, r.room_number, \" +\n                \"p.payment_date, p.amount, p.payment_method \" +\n                \"FROM Payments p \" +\n                \"LEFT JOIN Reservations res ON p.reservation_id = res.reservation_id \" +\n                \"LEFT JOIN Archived_Reservations ar ON p.reservation_id = ar.reservation_id \" +\n                \"LEFT JOIN Customers c ON (res.customer_id = c.customer_id OR ar.customer_id = c.customer_id) \" +\n                \"LEFT JOIN Rooms r ON (res.room_id = r.room_id OR ar.room_id = r.room_id)\";\n\n        String archiveQuery = \"SELECT ap.payment_id, ap.reservation_id, c.full_name, r.room_number, \" +\n                \"ap.payment_date, ap.amount, ap.payment_method \" +\n                \"FROM Archived_Payments ap \" +\n                \"JOIN Archived_Reservations ar ON ap.reservation_id = ar.reservation_id \" +\n                \"JOIN Customers c ON ar.customer_id = c.customer_id \" +\n                \"JOIN Rooms r ON ar.room_id = r.room_id\";\n\n        String finalQuery = query + \" UNION ALL \" + archiveQuery;\n\n        try (ConnectMySQL connection = new ConnectMySQL();\n             PreparedStatement pstmt = connection.getConnection().prepareStatement(finalQuery);\n             ResultSet rs = pstmt.executeQuery()) {\n\n            while (rs.next()) {\n                tableModel.addRow(new Object[] {\n                        rs.getInt(\"payment_id\"),\n                        rs.getInt(\"reservation_id\"),\n                        rs.getString(\"full_name\"),\n                        rs.getInt(\"room_number\"),\n                        rs.getDate(\"payment_date\"),\n                        rs.getBigDecimal(\"amount\"),\n                        rs.getString(\"payment_method\")\n                });\n            }\n\n        } catch (Exception e) {\n            e.printStackTrace();\n            JOptionPane.showMessageDialog(this, \"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043f\u043b\u0430\u0442\u0435\u0436\u0435\u0439.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n        }\n    }\n\n    private void calculateTotalRevenue() {\n        String query = \"SELECT SUM(amount) AS total_revenue FROM (\" +\n                \"SELECT amount FROM Payments \" +\n                \"UNION ALL \" +\n                \"SELECT amount FROM Archived_Payments\" +\n                \") AS combined_payments\";\n        try (ConnectMySQL connection = new ConnectMySQL();\n             PreparedStatement pstmt = connection.getConnection().prepareStatement(query);\n             ResultSet rs = pstmt.executeQuery()) {\n\n            if (rs.next()) {\n                double totalRevenue = rs.getDouble(\"total_revenue\");\n                totalRevenueLabel.setText(\"\u041e\u0431\u0449\u0438\u0439 \u0434\u043e\u0445\u043e\u0434: \" + String.format(\"%.2f\", totalRevenue));\n            }\n\n        } catch (Exception e) {\n            e.printStackTrace();\n            JOptionPane.showMessageDialog(this, \"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0440\u0430\u0441\u0447\u0435\u0442\u0435 \u043e\u0431\u0449\u0435\u0433\u043e \u0434\u043e\u0445\u043e\u0434\u0430.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n        }\n    }\n}\n```\n\n**\u041f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u044f:**\n\n1. **\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0422\u0430\u0431\u043b\u0438\u0446 \u041f\u043b\u0430\u0442\u0435\u0436\u0435\u0439:** \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f `UNION ALL` \u0434\u043b\u044f \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0438\u0437 `Payments` \u0438 `Archived_Payments`, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0432\u0441\u0435 \u043f\u043b\u0430\u0442\u0435\u0436\u0438 \u0432 \u043e\u0434\u043d\u043e\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438.\n\n2. **\u0420\u0430\u0441\u0447\u0435\u0442 \u041e\u0431\u0449\u0435\u0433\u043e \u0414\u043e\u0445\u043e\u0434\u0430:** \u041e\u0431\u0449\u0438\u0439 \u0434\u043e\u0445\u043e\u0434 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0443\u0442\u0435\u043c \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u043f\u043b\u0430\u0442\u0435\u0436\u0435\u0439 \u0438\u0437 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u043d\u043e\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u0438.\n\n#### b. \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 `PaymentsPanel` (\u041f\u0430\u043d\u0435\u043b\u044c \u0420\u0435\u0441\u0435\u043f\u0448\u0438\u043e\u043d\u0438\u0441\u0442\u0430)\n\n\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u043f\u0430\u043d\u0435\u043b\u0438 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0430\u043d\u0435\u043b\u044c \u0440\u0435\u0441\u0435\u043f\u0448\u0438\u043e\u043d\u0438\u0441\u0442\u0430 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0430\u0440\u0445\u0438\u0432\u043d\u044b\u0445 \u043f\u043b\u0430\u0442\u0435\u0436\u0435\u0439:\n\n```java\n// \u041f\u0430\u043d\u0435\u043b\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043b\u0430\u0442\u0435\u0436\u0430\u043c\u0438\nclass PaymentsPanel extends JPanel {\n    private JTable table;\n    private DefaultTableModel tableModel;\n    private JButton refreshButton;\n    private JLabel totalRevenueLabel;\n\n    public PaymentsPanel() {\n        setLayout(new BorderLayout());\n\n        // \u041f\u0430\u043d\u0435\u043b\u044c \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043e\u0431\u0449\u0435\u0433\u043e \u0434\u043e\u0445\u043e\u0434\u0430\n        JPanel topPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));\n        totalRevenueLabel = new JLabel(\"\u041e\u0431\u0449\u0438\u0439 \u0434\u043e\u0445\u043e\u0434: 0.00\");\n        topPanel.add(totalRevenueLabel);\n        add(topPanel, BorderLayout.NORTH); // \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u043f\u0430\u043d\u0435\u043b\u0438\n\n        // \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b\n        tableModel = new DefaultTableModel();\n        tableModel.setColumnIdentifiers(new String[] {\"ID \u041f\u043b\u0430\u0442\u0435\u0436\u0430\", \"\u0411\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 ID\", \"\u041a\u043b\u0438\u0435\u043d\u0442\", \"\u041d\u043e\u043c\u0435\u0440\", \"\u0414\u0430\u0442\u0430 \u043e\u043f\u043b\u0430\u0442\u044b\", \"\u0421\u0443\u043c\u043c\u0430\", \"\u041c\u0435\u0442\u043e\u0434 \u043e\u043f\u043b\u0430\u0442\u044b\"});\n        table = new JTable(tableModel);\n        loadPayments();\n\n        add(new JScrollPane(table), BorderLayout.CENTER);\n\n        // \u041a\u043d\u043e\u043f\u043a\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f\n        JPanel buttonPanel = new JPanel();\n        refreshButton = new JButton(\"\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c\");\n        buttonPanel.add(refreshButton);\n        add(buttonPanel, BorderLayout.SOUTH);\n\n        // \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439\n        refreshButton.addActionListener(e -> loadPayments());\n    }\n\n    private void loadPayments() {\n        tableModel.setRowCount(0);\n        String query = \"SELECT p.payment_id, p.reservation_id, c.full_name, r.room_number, \" +\n                \"p.payment_date, p.amount, p.payment_method \" +\n                \"FROM Payments p \" +\n                \"LEFT JOIN Reservations res ON p.reservation_id = res.reservation_id \" +\n                \"LEFT JOIN Archived_Reservations ar ON p.reservation_id = ar.reservation_id \" +\n                \"LEFT JOIN Customers c ON (res.customer_id = c.customer_id OR ar.customer_id = c.customer_id) \" +\n                \"LEFT JOIN Rooms r ON (res.room_id = r.room_id OR ar.room_id = r.room_id)\";\n\n        String archiveQuery = \"SELECT ap.payment_id, ap.reservation_id, c.full_name, r.room_number, \" +\n                \"ap.payment_date, ap.amount, ap.payment_method \" +\n                \"FROM Archived_Payments ap \" +\n                \"JOIN Archived_Reservations ar ON ap.reservation_id = ar.reservation_id \" +\n                \"JOIN Customers c ON ar.customer_id = c.customer_id \" +\n                \"JOIN Rooms r ON ar.room_id = r.room_id\";\n\n        String finalQuery = query + \" UNION ALL \" + archiveQuery;\n\n        try (ConnectMySQL connection = new ConnectMySQL();\n             PreparedStatement pstmt = connection.getConnection().prepareStatement(finalQuery);\n             ResultSet rs = pstmt.executeQuery()) {\n\n            while (rs.next()) {\n                tableModel.addRow(new Object[] {\n                        rs.getInt(\"payment_id\"),\n                        rs.getInt(\"reservation_id\"),\n                        rs.getString(\"full_name\"),\n                        rs.getInt(\"room_number\"),\n                        rs.getDate(\"payment_date\"),\n                        rs.getBigDecimal(\"amount\"),\n                        rs.getString(\"payment_method\")\n                });\n            }\n\n            // \u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u0449\u0435\u0433\u043e \u0434\u043e\u0445\u043e\u0434\u0430\n            calculateTotalRevenue();\n\n        } catch (Exception e) {\n            e.printStackTrace();\n            JOptionPane.showMessageDialog(this, \"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043f\u043b\u0430\u0442\u0435\u0436\u0435\u0439.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n        }\n    }\n\n    private void calculateTotalRevenue() {\n        String query = \"SELECT SUM(amount) AS total_revenue FROM (\" +\n                \"SELECT amount FROM Payments \" +\n                \"UNION ALL \" +\n                \"SELECT amount FROM Archived_Payments\" +\n                \") AS combined_payments\";\n        try (ConnectMySQL connection = new ConnectMySQL();\n             PreparedStatement pstmt = connection.getConnection().prepareStatement(query);\n             ResultSet rs = pstmt.executeQuery()) {\n\n            if (rs.next()) {\n                double totalRevenue = rs.getDouble(\"total_revenue\");\n                totalRevenueLabel.setText(\"\u041e\u0431\u0449\u0438\u0439 \u0434\u043e\u0445\u043e\u0434: \" + String.format(\"%.2f\", totalRevenue));\n            }\n\n        } catch (Exception e) {\n            e.printStackTrace();\n            JOptionPane.showMessageDialog(this, \"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0440\u0430\u0441\u0447\u0435\u0442\u0435 \u043e\u0431\u0449\u0435\u0433\u043e \u0434\u043e\u0445\u043e\u0434\u0430.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n        }\n    }\n}\n```\n\n### 4. \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u043f\u043e \u0423\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044e\n\n1. **\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0412\u044b\u0441\u0435\u043b\u0435\u043d\u0438\u0435 \u041a\u043b\u0438\u0435\u043d\u0442\u043e\u0432:**\n   - **\u0417\u0430\u0434\u0430\u0447\u0430:** \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0438 \u0432\u044b\u0441\u0435\u043b\u044f\u0442\u044c \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432, \u0447\u0435\u0439 \u0441\u0440\u043e\u043a \u043f\u0440\u0435\u0431\u044b\u0432\u0430\u043d\u0438\u044f \u0438\u0441\u0442\u0435\u043a.\n   - **\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f:** \n     - \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 ScheduledExecutorService \u0438\u043b\u0438 \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u0437\u0430\u0434\u0430\u0447 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, cron) \u0434\u043b\u044f \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445.\n     - \u041f\u0440\u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u0438 \u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441 `check_out` \u0434\u0430\u0442\u043e\u0439 \u0440\u0430\u043d\u044c\u0448\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0434\u0430\u0442\u044b \u0438 \u0441\u0442\u0430\u0442\u0443\u0441\u043e\u043c \u043d\u0435 \"\u0412\u044b\u0441\u0435\u043b\u0435\u043d\" \u0438\u043b\u0438 \"\u041e\u0442\u043c\u0435\u043d\u0451\u043d\", \u0432\u044b\u0437\u044b\u0432\u0430\u0439\u0442\u0435 \u043c\u0435\u0442\u043e\u0434 `checkOut`.\n   \n   \u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f `ScheduledExecutorService`:\n\n   ```java\n   import java.util.concurrent.Executors;\n   import java.util.concurrent.ScheduledExecutorService;\n   import java.util.concurrent.TimeUnit;\n   import java.sql.*;\n\n   public class AutoCheckoutService {\n       private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);\n\n       public void startService() {\n           Runnable task = () -> {\n               String query = \"SELECT reservation_id FROM Reservations WHERE check_out < CURDATE() AND status NOT IN ('\u0412\u044b\u0441\u0435\u043b\u0435\u043d', '\u041e\u0442\u043c\u0435\u043d\u0451\u043d')\";\n               try (ConnectMySQL connection = new ConnectMySQL();\n                    PreparedStatement pstmt = connection.getConnection().prepareStatement(query);\n                    ResultSet rs = pstmt.executeQuery()) {\n    \n                   while (rs.next()) {\n                       int reservationId = rs.getInt(\"reservation_id\");\n                       // \u0412\u044b\u0437\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u0430 \u0432\u044b\u0441\u0435\u043b\u0435\u043d\u0438\u044f\n                       // \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043c\u0435\u0442\u043e\u0434 checkOut \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0437\u0434\u0435\u0441\u044c \u0438\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043a\u043b\u0430\u0441\u0441\n                       // \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:\n                       // new ReservationsPanel().checkOut(reservationId);\n                   }\n    \n               } catch (SQLException e) {\n                   e.printStackTrace();\n               }\n           };\n           // \u041f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u043d\u0430 \u0435\u0436\u0435\u0434\u043d\u0435\u0432\u043d\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0432 \u043f\u043e\u043b\u043d\u043e\u0447\u044c\n           scheduler.scheduleAtFixedRate(task, 0, 1, TimeUnit.DAYS);\n       }\n\n       public void stopService() {\n           scheduler.shutdown();\n       }\n   }\n   ```\n\n   > **\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435:** \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043c\u0435\u0442\u043e\u0434\u0430 `checkOut` \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433\u0430, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0431\u044b\u043b \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0438\u0437 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0432\u044b\u0441\u0435\u043b\u0435\u043d\u0438\u044f (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0433\u043e `static` \u0438\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0434\u0438\u0437\u0430\u0439\u043d-\u043f\u0430\u0442\u0442\u0435\u0440\u043d).\n\n2. **\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0418\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 \u0438 \u041b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435:**\n   - \u0423\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0432\u0441\u0435 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 \u0441\u0431\u043e\u044f \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0441 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0432\u043d\u044b\u043c\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e.\n   - \u0420\u0435\u0430\u043b\u0438\u0437\u0443\u0439\u0442\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0438 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430.\n\n3. **\u0423\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0435 \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430:**\n   - \u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u044e\u0449\u0438\u0435 \u0434\u0438\u0430\u043b\u043e\u0433\u043e\u0432\u044b\u0435 \u043e\u043a\u043d\u0430 \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438 \u0432\u044b\u0441\u043e\u043a\u0435\u043b\u0438\u043a\u043b\u0435\u043d\u0438\u0438).\n   - \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u0441\u0442\u0430\u0442\u0443\u0441\u043e\u0432 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0446\u0432\u0435\u0442\u043d\u043e\u0439 \u043a\u043e\u0434 \u0434\u043b\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0441\u0442\u0430\u0442\u0443\u0441\u043e\u0432 \u043d\u043e\u043c\u0435\u0440\u043e\u0432).\n\n4. **\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c:**\n   - \u0423\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0432\u0441\u0435 \u0432\u0432\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442\u0441\u044f \u043d\u0430 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u044c \u0438 \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u044b \u043e\u0442 SQL-\u0438\u043d\u044a\u0435\u043a\u0446\u0438\u0439 (\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 `PreparedStatement` \u0443\u0436\u0435 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0432 \u044d\u0442\u043e\u043c).\n   - \u0425\u0440\u0430\u043d\u0438\u0442\u0435 \u043f\u0430\u0440\u043e\u043b\u0438 \u0432 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435 (\u0447\u0442\u043e \u0443\u0436\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c SHA-256).\n\n5. **\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0417\u0430\u043f\u0440\u043e\u0441\u043e\u0432:**\n   - \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0434\u043b\u044f \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u043f\u043e\u043b\u0435\u0439, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a `reservation_id`, `customer_id`, \u0438 `room_id`, \u0434\u043b\u044f \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432.\n\n## \u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\n\n\u0420\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0432 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u044f\u043c\u0438 \u043e \u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\u0445 \u0438 \u043f\u043b\u0430\u0442\u0435\u0436\u0430\u0445, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044f \u0438\u0445 \u0441\u043e\u0445\u0440\u0430\u043d\u043d\u043e\u0441\u0442\u044c \u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u043f\u0430\u043d\u0435\u043b\u044f\u0445 \u043a\u0430\u043a \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430, \u0442\u0430\u043a \u0438 \u0440\u0435\u0441\u0435\u043f\u0448\u0438\u043e\u043d\u0438\u0441\u0442\u0430. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u043f\u043e\u043c\u043e\u0433\u0443\u0442 \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u043e\u0431\u0449\u0443\u044e \u043d\u0430\u0434\u0435\u0436\u043d\u043e\u0441\u0442\u044c \u0438 \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0430\u0448\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b.\n\n\u0415\u0441\u043b\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0438\u043b\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u043c\u043e\u0449\u044c \u0441 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u043d\u0435 \u0441\u0442\u0435\u0441\u043d\u044f\u0439\u0442\u0435\u0441\u044c \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f!","behavior":"degenerate_repetition","conversation_hash":"0edf14e3d283a87d5e2a6ab76b6e7431","conversation_redacted":false,"conversation_toxic":false,"country":"Kyrgyzstan","empty_output":false,"evidence_codes":[],"label":"absent","label_present":false,"label_qualified":false,"label_source":"Final dense release","language":"English","model":"o1-mini-2024-09-12","n_chars":125916,"n_turns_in_conversation":1,"n_words":9493,"source_row_offset":5440,"source_shard":"turns-00053.parquet","timestamp":"Mon, 18 Nov 2024 18:10:48 GMT","turn_id":"3bc4e9cd3ac67d01c43df01d","turn_index":0,"user_text":"\n-- \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445\nCREATE DATABASE IF NOT EXISTS hotel;\nUSE hotel;\n\n-- \u0422\u0430\u0431\u043b\u0438\u0446\u0430 Administrators\nCREATE TABLE Administrators (\n    admin_id INT AUTO_INCREMENT PRIMARY KEY,\n    full_name VARCHAR(150) NOT NULL,\n    passport_number VARCHAR(20) UNIQUE NOT NULL,\n    address TEXT NOT NULL,\n    phone_number VARCHAR(30) UNIQUE NOT NULL,\n    email VARCHAR(100) UNIQUE NOT NULL,\n    login VARCHAR(30) UNIQUE NOT NULL,\n    password VARCHAR(255) NOT NULL,\n    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP\n);\n\n-- \u0422\u0430\u0431\u043b\u0438\u0446\u0430 Receptionists\nCREATE TABLE Receptionists (\n    receptionist_id INT AUTO_INCREMENT PRIMARY KEY,\n    full_name VARCHAR(150) NOT NULL,\n    passport_number VARCHAR(20) UNIQUE NOT NULL,\n    address TEXT NOT NULL,\n    phone_number VARCHAR(15) UNIQUE NOT NULL,\n    email VARCHAR(100) UNIQUE NOT NULL,\n    login VARCHAR(20) UNIQUE NOT NULL,\n    password VARCHAR(255) NOT NULL,\n    admin_id INT NOT NULL,\n    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,\n    FOREIGN KEY (admin_id) REFERENCES Administrators(admin_id) ON DELETE CASCADE\n);\n\n-- \u0422\u0430\u0431\u043b\u0438\u0446\u0430 Rooms\nCREATE TABLE Rooms (\n    room_id INT AUTO_INCREMENT PRIMARY KEY,\n    room_number INT UNIQUE NOT NULL,\n    status ENUM('\u0414\u043e\u0441\u0442\u0443\u043f\u0435\u043d', '\u041d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d', '\u0422\u0440\u0435\u0431\u0443\u0435\u0442 \u0443\u0431\u043e\u0440\u043a\u0438') DEFAULT '\u0414\u043e\u0441\u0442\u0443\u043f\u0435\u043d',\n    price DECIMAL(10,2) NOT NULL,\n    bed_type ENUM('\u041e\u0434\u043d\u043e\u043c\u0435\u0441\u0442\u043d\u044b\u0439', '\u0414\u0432\u0443\u0445\u043c\u0435\u0441\u0442\u043d\u044b\u0439', '\u0422\u0440\u0435\u0445\u043c\u0435\u0441\u0442\u043d\u044b\u0439', '\u0427\u0435\u0442\u044b\u0440\u0435\u0445\u043c\u0435\u0441\u0442\u043d\u044b\u0439') NOT NULL,\n    room_type ENUM('\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442', '\u041b\u044e\u043a\u0441', '\u0414\u0435\u043b\u044e\u043a\u0441') NOT NULL,\n    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP\n);\n\n-- \u0422\u0430\u0431\u043b\u0438\u0446\u0430 Customers\nCREATE TABLE Customers (\n    customer_id INT AUTO_INCREMENT PRIMARY KEY,\n    full_name VARCHAR(100) NOT NULL,\n    phone VARCHAR(15) UNIQUE NOT NULL,\n    email VARCHAR(100) UNIQUE,\n    gender ENUM('\u041c\u0443\u0436\u0441\u043a\u043e\u0439', '\u0416\u0435\u043d\u0441\u043a\u0438\u0439'),\n    country VARCHAR(50),\n    address TEXT,\n    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,\n    receptionist_id INT,\n    FOREIGN KEY (receptionist_id) REFERENCES Receptionists(receptionist_id) ON DELETE SET NULL\n);\n\n-- \u0422\u0430\u0431\u043b\u0438\u0446\u0430 Reservations\nCREATE TABLE Reservations (\n    reservation_id INT AUTO_INCREMENT PRIMARY KEY,\n    customer_id INT NOT NULL,\n    room_id INT NOT NULL,\n    check_in DATE NOT NULL,\n    check_out DATE NOT NULL,\n    status ENUM('\u0417\u0430\u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d', '\u0417\u0430\u0441\u0435\u043b\u0451\u043d', '\u0412\u044b\u0441\u0435\u043b\u0435\u043d', '\u041e\u0442\u043c\u0435\u043d\u0451\u043d') DEFAULT '\u0417\u0430\u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d',\n    total_amount DECIMAL(10,2),\n    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,\n    receptionist_id INT,\n    FOREIGN KEY (customer_id) REFERENCES Customers(customer_id) ON DELETE CASCADE,\n    FOREIGN KEY (room_id) REFERENCES Rooms(room_id) ON DELETE CASCADE,\n    FOREIGN KEY (receptionist_id) REFERENCES Receptionists(receptionist_id) ON DELETE RESTRICT\n);\n\n-- \u0422\u0430\u0431\u043b\u0438\u0446\u0430 Payments\nCREATE TABLE Payments (\n    payment_id INT AUTO_INCREMENT PRIMARY KEY,\n    reservation_id INT NOT NULL,\n    amount DECIMAL(10, 2) NOT NULL,\n    payment_date DATE NOT NULL,\n    payment_method ENUM('\u041d\u0430\u043b\u0438\u0447\u043d\u044b\u0435', '\u041a\u0440\u0435\u0434\u0438\u0442\u043d\u0430\u044f \u043a\u0430\u0440\u0442\u0430', '\u0414\u0435\u0431\u0435\u0442\u043e\u0432\u0430\u044f \u043a\u0430\u0440\u0442\u0430', '\u041e\u043d\u043b\u0430\u0439\u043d \u043f\u0435\u0440\u0435\u0432\u043e\u0434') NOT NULL,\n    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n    FOREIGN KEY (reservation_id) REFERENCES Reservations(reservation_id) ON DELETE CASCADE\n);\n\n-- \u0422\u0430\u0431\u043b\u0438\u0446\u0430 Archived_Reservations\nCREATE TABLE IF NOT EXISTS Archived_Reservations (\n    archive_id INT AUTO_INCREMENT PRIMARY KEY,\n    reservation_id INT NOT NULL,\n    customer_id INT NOT NULL,\n    room_id INT NOT NULL,\n    check_in DATE NOT NULL,\n    check_out DATE NOT NULL,\n    status ENUM('\u0417\u0430\u0441\u0435\u043b\u0451\u043d', '\u0412\u044b\u0441\u0435\u043b\u0435\u043d', '\u041e\u0442\u043c\u0435\u043d\u0451\u043d') NOT NULL,\n    total_amount DECIMAL(10,2) NOT NULL,\n    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,\n    FOREIGN KEY (customer_id) REFERENCES Customers(customer_id) ON DELETE CASCADE,\n    FOREIGN KEY (room_id) REFERENCES Rooms(room_id) ON DELETE CASCADE\n);\n\n\n\n\n\n\n\n\n\n\n// src/h/DashboardAdmin.java\npackage h;\n\nimport javax.swing.*;\nimport javax.swing.table.DefaultTableModel;\nimport java.awt.*;\nimport java.awt.event.*;\nimport java.sql.*;\nimport java.security.MessageDigest;\nimport java.security.NoSuchAlgorithmException;\n\npublic class DashboardAdmin extends JFrame {\n\n    private int adminId; // \u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430\n\n    public DashboardAdmin(int adminId) {\n        this.adminId = adminId;\n        setTitle(\"\u041f\u0430\u043d\u0435\u043b\u044c \u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430\");\n        setSize(900, 600);\n        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);\n        setLocationRelativeTo(null);\n\n        // \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0432\u043a\u043b\u0430\u0434\u043e\u043a\n        JTabbedPane tabbedPane = new JTabbedPane();\n\n        tabbedPane.addTab(\"\u0420\u0435\u0441\u0435\u043f\u0448\u0438\u043e\u043d\u0438\u0441\u0442\u044b\", new ReceptionistsPanel());\n        tabbedPane.addTab(\"\u041d\u043e\u043c\u0435\u0440\u0430\", new RoomsPanel());\n        tabbedPane.addTab(\"\u0410\u0440\u0445\u0438\u0432\u044b\", new ArchivesPanel());\n        tabbedPane.addTab(\"\u0424\u0438\u043d\u0430\u043d\u0441\u044b\", new FinancePanel());\n\n        add(tabbedPane);\n        setVisible(true);\n    }\n\n    // \u041c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u0445\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u0440\u043e\u043b\u044f\n    private String hashPassword(String password) {\n        try {\n            MessageDigest md = MessageDigest.getInstance(\"SHA-256\");\n            byte[] hashBytes = md.digest(password.getBytes());\n\n            StringBuilder sb = new StringBuilder();\n            for(byte b : hashBytes){\n                sb.append(String.format(\"%02x\", b));\n            }\n\n            return sb.toString();\n        } catch (NoSuchAlgorithmException e) {\n            e.printStackTrace();\n            return null;\n        }\n    }\n\n    // \u041f\u0430\u043d\u0435\u043b\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u0441\u0435\u043f\u0448\u0438\u043e\u043d\u0438\u0441\u0442\u0430\u043c\u0438\n    class ReceptionistsPanel extends JPanel {\n        private JTable table;\n        private DefaultTableModel tableModel;\n        private JButton addButton, editButton, deleteButton;\n\n        public ReceptionistsPanel() {\n            setLayout(new BorderLayout());\n\n            // \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b\n            tableModel = new DefaultTableModel();\n            tableModel.setColumnIdentifiers(new String[] {\"ID\", \"\u041f\u043e\u043b\u043d\u043e\u0435 \u0438\u043c\u044f\", \"\u041f\u0430\u0441\u043f\u043e\u0440\u0442\", \"\u0410\u0434\u0440\u0435\u0441\", \"\u0422\u0435\u043b\u0435\u0444\u043e\u043d\", \"Email\", \"\u041b\u043e\u0433\u0438\u043d\"});\n            table = new JTable(tableModel);\n            loadReceptionists();\n\n            add(new JScrollPane(table), BorderLayout.CENTER);\n\n            // \u041a\u043d\u043e\u043f\u043a\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f\n            JPanel buttonPanel = new JPanel();\n            addButton = new JButton(\"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c\");\n            editButton = new JButton(\"\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\");\n            deleteButton = new JButton(\"\u0423\u0434\u0430\u043b\u0438\u0442\u044c\");\n            buttonPanel.add(addButton);\n            buttonPanel.add(editButton);\n            buttonPanel.add(deleteButton);\n\n            add(buttonPanel, BorderLayout.SOUTH);\n\n            // \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439\n            addButton.addActionListener(e -> openReceptionistForm(null));\n            editButton.addActionListener(e -> {\n                int selectedRow = table.getSelectedRow();\n                if (selectedRow >= 0) {\n                    int receptionistId = (int)tableModel.getValueAt(selectedRow, 0);\n                    openReceptionistForm(receptionistId);\n                } else {\n                    JOptionPane.showMessageDialog(this, \"\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0440\u0435\u0441\u0435\u043f\u0448\u0438\u043e\u043d\u0438\u0441\u0442\u0430 \u0434\u043b\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.\");\n                }\n            });\n            deleteButton.addActionListener(e -> {\n                int selectedRow = table.getSelectedRow();\n                if (selectedRow >= 0) {\n                    int receptionistId = (int)tableModel.getValueAt(selectedRow, 0);\n                    int confirm = JOptionPane.showConfirmDialog(this, \"\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e\u0433\u043e \u0440\u0435\u0441\u0435\u043f\u0448\u0438\u043e\u043d\u0438\u0441\u0442\u0430?\", \"\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435\", JOptionPane.YES_NO_OPTION);\n                    if (confirm == JOptionPane.YES_OPTION) {\n                        deleteReceptionist(receptionistId);\n                        loadReceptionists();\n                    }\n                } else {\n                    JOptionPane.showMessageDialog(this, \"\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0440\u0435\u0441\u0435\u043f\u0448\u0438\u043e\u043d\u0438\u0441\u0442\u0430 \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f.\");\n                }\n            });\n        }\n\n        private void loadReceptionists() {\n            tableModel.setRowCount(0);\n            String query = \"SELECT receptionist_id, full_name, passport_number, address, phone_number, email, login FROM Receptionists\";\n            try (ConnectMySQL connection = new ConnectMySQL();\n                 PreparedStatement pstmt = connection.getConnection().prepareStatement(query);\n                 ResultSet rs = pstmt.executeQuery()) {\n\n                while (rs.next()) {\n                    tableModel.addRow(new Object[] {\n                            rs.getInt(\"receptionist_id\"),\n                            rs.getString(\"full_name\"),\n                            rs.getString(\"passport_number\"),\n                            rs.getString(\"address\"),\n                            rs.getString(\"phone_number\"),\n                            rs.getString(\"email\"),\n                            rs.getString(\"login\")\n                    });\n                }\n\n            } catch (Exception e) {\n                e.printStackTrace();\n                JOptionPane.showMessageDialog(this, \"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0440\u0435\u0441\u0435\u043f\u0448\u0438\u043e\u043d\u0438\u0441\u0442\u043e\u0432.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n            }\n        }\n\n        private void openReceptionistForm(Integer receptionistId) {\n            new ReceptionistForm(receptionistId, this);\n        }\n\n        private void deleteReceptionist(int receptionistId) {\n            String query = \"DELETE FROM Receptionists WHERE receptionist_id = ?\";\n            try (ConnectMySQL connection = new ConnectMySQL();\n                 PreparedStatement pstmt = connection.getConnection().prepareStatement(query)) {\n\n                pstmt.setInt(1, receptionistId);\n                pstmt.executeUpdate();\n\n                JOptionPane.showMessageDialog(this, \"\u0420\u0435\u0441\u0435\u043f\u0448\u0438\u043e\u043d\u0438\u0441\u0442 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0443\u0434\u0430\u043b\u0435\u043d.\");\n\n            } catch (SQLException e) {\n                e.printStackTrace();\n                JOptionPane.showMessageDialog(this, \"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u0440\u0435\u0441\u0435\u043f\u0448\u0438\u043e\u043d\u0438\u0441\u0442\u0430.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n            }\n        }\n    }\n\n    // \u0424\u043e\u0440\u043c\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f/\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0435\u0441\u0435\u043f\u0448\u0438\u043e\u043d\u0438\u0441\u0442\u0430\n    class ReceptionistForm extends JDialog implements ActionListener {\n        private JTextField nameField, passportField, addressField, phoneField, emailField, loginField;\n        private JPasswordField passwordField;\n        private JButton saveButton, cancelButton;\n        private Integer receptionistId; // Null \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u043d\u0435 null \u0434\u043b\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\n        private ReceptionistsPanel parentPanel;\n\n        public ReceptionistForm(Integer receptionistId, ReceptionistsPanel parentPanel) {\n            this.receptionistId = receptionistId;\n            this.parentPanel = parentPanel;\n\n            setTitle(receptionistId == null ? \"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0420\u0435\u0441\u0435\u043f\u0448\u0438\u043e\u043d\u0438\u0441\u0442\u0430\" : \"\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0420\u0435\u0441\u0435\u043f\u0448\u0438\u043e\u043d\u0438\u0441\u0442\u0430\");\n            setSize(400, 500);\n            setLocationRelativeTo(null);\n            setModal(true);\n            setLayout(new GridBagLayout());\n            GridBagConstraints gbc = new GridBagConstraints();\n            gbc.fill = GridBagConstraints.HORIZONTAL;\n            gbc.insets = new Insets(5,5,5,5);\n\n            // \u041f\u043e\u043b\u043d\u043e\u0435 \u0438\u043c\u044f\n            gbc.gridx = 0;\n            gbc.gridy = 0;\n            add(new JLabel(\"\u041f\u043e\u043b\u043d\u043e\u0435 \u0438\u043c\u044f:\"), gbc);\n            nameField = new JTextField(20);\n            gbc.gridx = 1;\n            add(nameField, gbc);\n\n            // \u041f\u0430\u0441\u043f\u043e\u0440\u0442\n            gbc.gridx = 0;\n            gbc.gridy++;\n            add(new JLabel(\"\u041d\u043e\u043c\u0435\u0440 \u043f\u0430\u0441\u043f\u043e\u0440\u0442\u0430:\"), gbc);\n            passportField = new JTextField(20);\n            gbc.gridx = 1;\n            add(passportField, gbc);\n\n            // \u0410\u0434\u0440\u0435\u0441\n            gbc.gridx = 0;\n            gbc.gridy++;\n            add(new JLabel(\"\u0410\u0434\u0440\u0435\u0441:\"), gbc);\n            addressField = new JTextField(20);\n            gbc.gridx = 1;\n            add(addressField, gbc);\n\n            // \u0422\u0435\u043b\u0435\u0444\u043e\u043d\n            gbc.gridx = 0;\n            gbc.gridy++;\n            add(new JLabel(\"\u0422\u0435\u043b\u0435\u0444\u043e\u043d:\"), gbc);\n            phoneField = new JTextField(20);\n            gbc.gridx = 1;\n            add(phoneField, gbc);\n\n            // Email\n            gbc.gridx = 0;\n            gbc.gridy++;\n            add(new JLabel(\"Email:\"), gbc);\n            emailField = new JTextField(20);\n            gbc.gridx = 1;\n            add(emailField, gbc);\n\n            // \u041b\u043e\u0433\u0438\u043d\n            gbc.gridx = 0;\n            gbc.gridy++;\n            add(new JLabel(\"\u041b\u043e\u0433\u0438\u043d:\"), gbc);\n            loginField = new JTextField(20);\n            gbc.gridx = 1;\n            add(loginField, gbc);\n\n            // \u041f\u0430\u0440\u043e\u043b\u044c\n            gbc.gridx = 0;\n            gbc.gridy++;\n            add(new JLabel(\"\u041f\u0430\u0440\u043e\u043b\u044c:\"), gbc);\n            passwordField = new JPasswordField(20);\n            gbc.gridx = 1;\n            add(passwordField, gbc);\n\n            // \u041a\u043d\u043e\u043f\u043a\u0438\n            gbc.gridx = 0;\n            gbc.gridy++;\n            gbc.gridwidth = 2;\n            JPanel buttonPanel = new JPanel();\n            saveButton = new JButton(\"\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c\");\n            cancelButton = new JButton(\"\u041e\u0442\u043c\u0435\u043d\u0430\");\n            buttonPanel.add(saveButton);\n            buttonPanel.add(cancelButton);\n            add(buttonPanel, gbc);\n\n            // \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\n            if (receptionistId != null) {\n                loadReceptionistData();\n            }\n\n            // \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438\n            saveButton.addActionListener(this);\n            cancelButton.addActionListener(e -> dispose());\n\n            setVisible(true);\n        }\n\n        private void loadReceptionistData() {\n            String query = \"SELECT * FROM Receptionists WHERE receptionist_id = ?\";\n            try (ConnectMySQL connection = new ConnectMySQL();\n                 PreparedStatement pstmt = connection.getConnection().prepareStatement(query)) {\n\n                pstmt.setInt(1, receptionistId);\n                try (ResultSet rs = pstmt.executeQuery()) {\n                    if (rs.next()) {\n                        nameField.setText(rs.getString(\"full_name\"));\n                        passportField.setText(rs.getString(\"passport_number\"));\n                        addressField.setText(rs.getString(\"address\"));\n                        phoneField.setText(rs.getString(\"phone_number\"));\n                        emailField.setText(rs.getString(\"email\"));\n                        loginField.setText(rs.getString(\"login\"));\n                        // \u041f\u0430\u0440\u043e\u043b\u044c \u043d\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438\n                    }\n                }\n\n            } catch (Exception e) {\n                e.printStackTrace();\n                JOptionPane.showMessageDialog(this, \"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0440\u0435\u0441\u0435\u043f\u0448\u0438\u043e\u043d\u0438\u0441\u0442\u0430.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n            }\n        }\n\n        @Override\n        public void actionPerformed(ActionEvent e) {\n            if (e.getSource() == saveButton) {\n                String fullName = nameField.getText().trim();\n                String passport = passportField.getText().trim();\n                String address = addressField.getText().trim();\n                String phone = phoneField.getText().trim();\n                String email = emailField.getText().trim();\n                String login = loginField.getText().trim();\n                String password = new String(passwordField.getPassword()).trim();\n\n                // \u0412\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f\n                if (fullName.isEmpty() || passport.isEmpty() || address.isEmpty() ||\n                        phone.isEmpty() || email.isEmpty() || login.isEmpty() ||\n                        (receptionistId == null && password.isEmpty())) {\n                    JOptionPane.showMessageDialog(this, \"\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u0432\u0441\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043b\u044f.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n                    return;\n                }\n\n                try (ConnectMySQL connection = new ConnectMySQL()) {\n                    Connection conn = connection.getConnection();\n                    PreparedStatement pstmt;\n                    if (receptionistId == null) {\n                        // \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u0440\u0435\u0441\u0435\u043f\u0448\u0438\u043e\u043d\u0438\u0441\u0442\u0430\n                        String query = \"INSERT INTO Receptionists (full_name, passport_number, address, phone_number, email, login, password, admin_id, created_at, updated_at) \" +\n                                \"VALUES (?, ?, ?, ?, ?, ?, ?, ?, NOW(), NOW())\";\n                        pstmt = conn.prepareStatement(query);\n                        pstmt.setString(1, fullName);\n                        pstmt.setString(2, passport);\n                        pstmt.setString(3, address);\n                        pstmt.setString(4, phone);\n                        pstmt.setString(5, email);\n                        pstmt.setString(6, login);\n                        pstmt.setString(7, hashPassword(password));\n                        pstmt.setInt(8, adminId); // \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\n                    } else {\n                        // \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0440\u0435\u0441\u0435\u043f\u0448\u0438\u043e\u043d\u0438\u0441\u0442\u0430\n                        String query = \"UPDATE Receptionists SET full_name = ?, passport_number = ?, address = ?, phone_number = ?, email = ?, login = ?\" +\n                                (password.isEmpty() ? \"\" : \", password = ?\") +\n                                \", updated_at = NOW() WHERE receptionist_id = ?\";\n                        pstmt = conn.prepareStatement(query);\n                        pstmt.setString(1, fullName);\n                        pstmt.setString(2, passport);\n                        pstmt.setString(3, address);\n                        pstmt.setString(4, phone);\n                        pstmt.setString(5, email);\n                        pstmt.setString(6, login);\n                        int paramIndex = 7;\n                        if (!password.isEmpty()) {\n                            pstmt.setString(paramIndex++, hashPassword(password));\n                        }\n                        pstmt.setInt(paramIndex, receptionistId);\n                    }\n\n                    pstmt.executeUpdate();\n                    JOptionPane.showMessageDialog(this, \"\u0414\u0430\u043d\u043d\u044b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044b.\");\n                    parentPanel.loadReceptionists();\n                    dispose();\n\n                } catch (SQLIntegrityConstraintViolationException ex) {\n                    JOptionPane.showMessageDialog(this, \"\u0414\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043b\u043e\u0433\u0438\u043d\u0430, \u043f\u0430\u0441\u043f\u043e\u0440\u0442\u0430 \u0438\u043b\u0438 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n                } catch (Exception ex) {\n                    ex.printStackTrace();\n                    JOptionPane.showMessageDialog(this, \"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0440\u0435\u0441\u0435\u043f\u0448\u0438\u043e\u043d\u0438\u0441\u0442\u0430.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n                }\n            }\n        }\n    }\n\n    // \u041f\u0430\u043d\u0435\u043b\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u043c\u0435\u0440\u0430\u043c\u0438\n    class RoomsPanel extends JPanel {\n        private JTable table;\n        private DefaultTableModel tableModel;\n        private JButton addButton, editButton, deleteButton;\n\n        public RoomsPanel() {\n            setLayout(new BorderLayout());\n\n            // \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b\n            tableModel = new DefaultTableModel();\n            tableModel.setColumnIdentifiers(new String[] {\"ID\", \"\u041d\u043e\u043c\u0435\u0440\", \"\u0421\u0442\u0430\u0442\u0443\u0441\", \"\u0426\u0435\u043d\u0430\", \"\u0422\u0438\u043f \u043a\u0440\u043e\u0432\u0430\u0442\u0438\", \"\u0422\u0438\u043f \u043d\u043e\u043c\u0435\u0440\u0430\"});\n            table = new JTable(tableModel);\n            loadRooms();\n\n            add(new JScrollPane(table), BorderLayout.CENTER);\n\n            // \u041a\u043d\u043e\u043f\u043a\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f\n            JPanel buttonPanel = new JPanel();\n            addButton = new JButton(\"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c\");\n            editButton = new JButton(\"\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\");\n            deleteButton = new JButton(\"\u0423\u0434\u0430\u043b\u0438\u0442\u044c\");\n            buttonPanel.add(addButton);\n            buttonPanel.add(editButton);\n            buttonPanel.add(deleteButton);\n\n            add(buttonPanel, BorderLayout.SOUTH);\n\n            // \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439\n            addButton.addActionListener(e -> openRoomForm(null));\n            editButton.addActionListener(e -> {\n                int selectedRow = table.getSelectedRow();\n                if (selectedRow >= 0) {\n                    int roomId = (int)tableModel.getValueAt(selectedRow, 0);\n                    openRoomForm(roomId);\n                } else {\n                    JOptionPane.showMessageDialog(this, \"\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043d\u043e\u043c\u0435\u0440 \u0434\u043b\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.\");\n                }\n            });\n            deleteButton.addActionListener(e -> {\n                int selectedRow = table.getSelectedRow();\n                if (selectedRow >= 0) {\n                    int roomId = (int)tableModel.getValueAt(selectedRow, 0);\n                    int confirm = JOptionPane.showConfirmDialog(this, \"\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u043d\u043e\u043c\u0435\u0440?\", \"\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435\", JOptionPane.YES_NO_OPTION);\n                    if (confirm == JOptionPane.YES_OPTION) {\n                        deleteRoom(roomId);\n                        loadRooms();\n                    }\n                } else {\n                    JOptionPane.showMessageDialog(this, \"\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043d\u043e\u043c\u0435\u0440 \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f.\");\n                }\n            });\n        }\n\n        private void loadRooms() {\n            tableModel.setRowCount(0);\n            String query = \"SELECT room_id, room_number, status, price, bed_type, room_type FROM Rooms\";\n            try (ConnectMySQL connection = new ConnectMySQL();\n                 PreparedStatement pstmt = connection.getConnection().prepareStatement(query);\n                 ResultSet rs = pstmt.executeQuery()) {\n\n                while (rs.next()) {\n                    tableModel.addRow(new Object[] {\n                            rs.getInt(\"room_id\"),\n                            rs.getInt(\"room_number\"),\n                            rs.getString(\"status\"),\n                            rs.getBigDecimal(\"price\"),\n                            rs.getString(\"bed_type\"),\n                            rs.getString(\"room_type\")\n                    });\n                }\n\n            } catch (Exception e) {\n                e.printStackTrace();\n                JOptionPane.showMessageDialog(this, \"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043d\u043e\u043c\u0435\u0440\u043e\u0432.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n            }\n        }\n\n        private void openRoomForm(Integer roomId) {\n            new RoomForm(roomId, this);\n        }\n\n        private void deleteRoom(int roomId) {\n            String query = \"DELETE FROM Rooms WHERE room_id = ?\";\n            try (ConnectMySQL connection = new ConnectMySQL();\n                 PreparedStatement pstmt = connection.getConnection().prepareStatement(query)) {\n\n                pstmt.setInt(1, roomId);\n                pstmt.executeUpdate();\n\n                JOptionPane.showMessageDialog(this, \"\u041d\u043e\u043c\u0435\u0440 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0443\u0434\u0430\u043b\u0435\u043d.\");\n\n            } catch (SQLException e) {\n                e.printStackTrace();\n                JOptionPane.showMessageDialog(this, \"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u043d\u043e\u043c\u0435\u0440\u0430.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n            }\n        }\n    }\n\n    // \u0424\u043e\u0440\u043c\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f/\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u043e\u043c\u0435\u0440\u0430\n    class RoomForm extends JDialog implements ActionListener {\n        private JTextField roomNumberField, priceField;\n        private JComboBox<String> statusComboBox, bedTypeComboBox, roomTypeComboBox;\n        private JButton saveButton, cancelButton;\n        private Integer roomId;\n        private RoomsPanel parentPanel;\n\n        public RoomForm(Integer roomId, RoomsPanel parentPanel) {\n            this.roomId = roomId;\n            this.parentPanel = parentPanel;\n\n            setTitle(roomId == null ? \"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u041d\u043e\u043c\u0435\u0440\" : \"\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u041d\u043e\u043c\u0435\u0440\");\n            setSize(400, 400);\n            setLocationRelativeTo(null);\n            setModal(true);\n            setLayout(new GridBagLayout());\n            GridBagConstraints gbc = new GridBagConstraints();\n            gbc.fill = GridBagConstraints.HORIZONTAL;\n            gbc.insets = new Insets(5,5,5,5);\n\n            // \u041d\u043e\u043c\u0435\u0440 \u043a\u043e\u043c\u043d\u0430\u0442\u044b\n            gbc.gridx = 0;\n            gbc.gridy = 0;\n            add(new JLabel(\"\u041d\u043e\u043c\u0435\u0440 \u043a\u043e\u043c\u043d\u0430\u0442\u044b:\"), gbc);\n            roomNumberField = new JTextField(20);\n            gbc.gridx = 1;\n            add(roomNumberField, gbc);\n\n            // \u0421\u0442\u0430\u0442\u0443\u0441\n            gbc.gridx = 0;\n            gbc.gridy++;\n            add(new JLabel(\"\u0421\u0442\u0430\u0442\u0443\u0441:\"), gbc);\n            statusComboBox = new JComboBox<>(new String[] {\"\u0414\u043e\u0441\u0442\u0443\u043f\u0435\u043d\", \"\u041d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d\"});\n            gbc.gridx = 1;\n            add(statusComboBox, gbc);\n\n            // \u0426\u0435\u043d\u0430\n            gbc.gridx = 0;\n            gbc.gridy++;\n            add(new JLabel(\"\u0426\u0435\u043d\u0430:\"), gbc);\n            priceField = new JTextField(20);\n            gbc.gridx = 1;\n            add(priceField, gbc);\n\n            // \u0422\u0438\u043f \u043a\u0440\u043e\u0432\u0430\u0442\u0438\n            gbc.gridx = 0;\n            gbc.gridy++;\n            add(new JLabel(\"\u0422\u0438\u043f \u043a\u0440\u043e\u0432\u0430\u0442\u0438:\"), gbc);\n            bedTypeComboBox = new JComboBox<>(new String[] {\"\u041e\u0434\u043d\u043e\u043c\u0435\u0441\u0442\u043d\u044b\u0439\", \"\u0414\u0432\u0443\u0445\u043c\u0435\u0441\u0442\u043d\u044b\u0439\", \"\u0422\u0440\u0435\u0445\u043c\u0435\u0441\u0442\u043d\u044b\u0439\", \"\u0427\u0435\u0442\u044b\u0440\u0435\u0445\u043c\u0435\u0441\u0442\u043d\u044b\u0439\"});\n            gbc.gridx = 1;\n            add(bedTypeComboBox, gbc);\n\n            // \u0422\u0438\u043f \u043d\u043e\u043c\u0435\u0440\u0430\n            gbc.gridx = 0;\n            gbc.gridy++;\n            add(new JLabel(\"\u0422\u0438\u043f \u043d\u043e\u043c\u0435\u0440\u0430:\"), gbc);\n            roomTypeComboBox = new JComboBox<>(new String[] {\"\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\", \"\u041b\u044e\u043a\u0441\", \"\u0414\u0435\u043b\u044e\u043a\u0441\"});\n            gbc.gridx = 1;\n            add(roomTypeComboBox, gbc);\n\n            // \u041a\u043d\u043e\u043f\u043a\u0438\n            gbc.gridx = 0;\n            gbc.gridy++;\n            gbc.gridwidth = 2;\n            JPanel buttonPanel = new JPanel();\n            saveButton = new JButton(\"\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c\");\n            cancelButton = new JButton(\"\u041e\u0442\u043c\u0435\u043d\u0430\");\n            buttonPanel.add(saveButton);\n            buttonPanel.add(cancelButton);\n            add(buttonPanel, gbc);\n\n            // \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\n            if (roomId != null) {\n                loadRoomData();\n            }\n\n            // \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438\n            saveButton.addActionListener(this);\n            cancelButton.addActionListener(e -> dispose());\n\n            setVisible(true);\n        }\n\n        private void loadRoomData() {\n            String query = \"SELECT * FROM Rooms WHERE room_id = ?\";\n            try (ConnectMySQL connection = new ConnectMySQL();\n                 PreparedStatement pstmt = connection.getConnection().prepareStatement(query)) {\n\n                pstmt.setInt(1, roomId);\n                try (ResultSet rs = pstmt.executeQuery()) {\n                    if (rs.next()) {\n                        roomNumberField.setText(String.valueOf(rs.getInt(\"room_number\")));\n                        statusComboBox.setSelectedItem(rs.getString(\"status\"));\n                        priceField.setText(rs.getBigDecimal(\"price\").toString());\n                        bedTypeComboBox.setSelectedItem(rs.getString(\"bed_type\"));\n                        roomTypeComboBox.setSelectedItem(rs.getString(\"room_type\"));\n                    }\n                }\n\n            } catch (Exception e) {\n                e.printStackTrace();\n                JOptionPane.showMessageDialog(this, \"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u043e\u043c\u0435\u0440\u0430.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n            }\n        }\n\n        @Override\n        public void actionPerformed(ActionEvent e) {\n            if (e.getSource() == saveButton) {\n                String roomNumberStr = roomNumberField.getText().trim();\n                String status = (String)statusComboBox.getSelectedItem();\n                String priceStr = priceField.getText().trim();\n                String bedType = (String)bedTypeComboBox.getSelectedItem();\n                String roomType = (String)roomTypeComboBox.getSelectedItem();\n\n                // \u0412\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f\n                if (roomNumberStr.isEmpty() || status == null || priceStr.isEmpty() || bedType == null || roomType == null) {\n                    JOptionPane.showMessageDialog(this, \"\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u0432\u0441\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043b\u044f.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n                    return;\n                }\n\n                int roomNumber;\n                double price;\n                try {\n                    roomNumber = Integer.parseInt(roomNumberStr);\n                    price = Double.parseDouble(priceStr);\n                } catch (NumberFormatException ex) {\n                    JOptionPane.showMessageDialog(this, \"\u041d\u043e\u043c\u0435\u0440 \u043a\u043e\u043c\u043d\u0430\u0442\u044b \u0438 \u0446\u0435\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n                    return;\n                }\n\n                try (ConnectMySQL connection = new ConnectMySQL()) {\n                    Connection conn = connection.getConnection();\n                    PreparedStatement pstmt;\n\n                    if (roomId == null) {\n                        // \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u043d\u043e\u043c\u0435\u0440\u0430\n                        String query = \"INSERT INTO Rooms (room_number, status, price, bed_type, room_type, created_at, updated_at) \" +\n                                \"VALUES (?, ?, ?, ?, ?, NOW(), NOW())\";\n                        pstmt = conn.prepareStatement(query);\n                        pstmt.setInt(1, roomNumber);\n                        pstmt.setString(2, status);\n                        pstmt.setDouble(3, price);\n                        pstmt.setString(4, bedType);\n                        pstmt.setString(5, roomType);\n                    } else {\n                        // \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u043d\u043e\u043c\u0435\u0440\u0430\n                        String query = \"UPDATE Rooms SET room_number = ?, status = ?, price = ?, bed_type = ?, room_type = ?, updated_at = NOW() WHERE room_id = ?\";\n                        pstmt = conn.prepareStatement(query);\n                        pstmt.setInt(1, roomNumber);\n                        pstmt.setString(2, status);\n                        pstmt.setDouble(3, price);\n                        pstmt.setString(4, bedType);\n                        pstmt.setString(5, roomType);\n                        pstmt.setInt(6, roomId);\n                    }\n\n                    pstmt.executeUpdate();\n                    JOptionPane.showMessageDialog(this, \"\u0414\u0430\u043d\u043d\u044b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044b.\");\n                    parentPanel.loadRooms();\n                    dispose();\n\n                } catch (SQLIntegrityConstraintViolationException ex) {\n                    JOptionPane.showMessageDialog(this, \"\u041d\u043e\u043c\u0435\u0440 \u043a\u043e\u043c\u043d\u0430\u0442\u044b \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n                } catch (Exception ex) {\n                    ex.printStackTrace();\n                    JOptionPane.showMessageDialog(this, \"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u043e\u043c\u0435\u0440\u0430.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n                }\n            }\n        }\n    }\n\n    // \u041f\u0430\u043d\u0435\u043b\u044c \u0430\u0440\u0445\u0438\u0432\u043e\u0432 \u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0439\n    class ArchivesPanel extends JPanel {\n        private JTable table;\n        private DefaultTableModel tableModel;\n\n        public ArchivesPanel() {\n            setLayout(new BorderLayout());\n\n            // \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b\n            tableModel = new DefaultTableModel();\n            tableModel.setColumnIdentifiers(new String[] {\"\u0410\u0440\u0445\u0438\u0432 ID\", \"\u0411\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 ID\", \"\u041a\u043b\u0438\u0435\u043d\u0442\", \"\u041d\u043e\u043c\u0435\u0440\", \"\u0414\u0430\u0442\u0430 \u0437\u0430\u0435\u0437\u0434\u0430\", \"\u0414\u0430\u0442\u0430 \u0432\u044b\u0435\u0437\u0434\u0430\", \"\u0421\u0442\u0430\u0442\u0443\u0441\", \"\u0421\u0443\u043c\u043c\u0430\"});\n            table = new JTable(tableModel);\n            loadArchivedReservations();\n\n            add(new JScrollPane(table), BorderLayout.CENTER);\n        }\n\n        private void loadArchivedReservations() {\n            tableModel.setRowCount(0);\n            String query = \"SELECT ar.archive_id, ar.reservation_id, c.full_name, r.room_number, ar.check_in, ar.check_out, ar.status, ar.total_amount \" +\n                    \"FROM Archived_Reservations ar \" +\n                    \"JOIN Customers c ON ar.customer_id = c.customer_id \" +\n                    \"JOIN Rooms r ON ar.room_id = r.room_id\";\n            try (ConnectMySQL connection = new ConnectMySQL();\n                 PreparedStatement pstmt = connection.getConnection().prepareStatement(query);\n                 ResultSet rs = pstmt.executeQuery()) {\n\n                while (rs.next()) {\n                    tableModel.addRow(new Object[] {\n                            rs.getInt(\"archive_id\"),\n                            rs.getInt(\"reservation_id\"),\n                            rs.getString(\"full_name\"),\n                            rs.getInt(\"room_number\"),\n                            rs.getDate(\"check_in\"),\n                            rs.getDate(\"check_out\"),\n                            rs.getString(\"status\"),\n                            rs.getBigDecimal(\"total_amount\")\n                    });\n                }\n\n            } catch (Exception e) {\n                e.printStackTrace();\n                JOptionPane.showMessageDialog(this, \"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0430\u0440\u0445\u0438\u0432\u043d\u044b\u0445 \u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0439.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n            }\n        }\n    }\n\n    // \u041f\u0430\u043d\u0435\u043b\u044c \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\n    class FinancePanel extends JPanel {\n        private JTable table;\n        private DefaultTableModel tableModel;\n        private JLabel totalRevenueLabel;\n\n        public FinancePanel() {\n            setLayout(new BorderLayout());\n\n            // \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b\n            tableModel = new DefaultTableModel();\n            tableModel.setColumnIdentifiers(new String[] {\"\u041f\u043b\u0430\u0442\u0435\u0436 ID\", \"\u0411\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 ID\", \"\u041a\u043b\u0438\u0435\u043d\u0442\", \"\u041d\u043e\u043c\u0435\u0440\", \"\u0414\u0430\u0442\u0430 \u043e\u043f\u043b\u0430\u0442\u044b\", \"\u0421\u0443\u043c\u043c\u0430\", \"\u041c\u0435\u0442\u043e\u0434 \u043e\u043f\u043b\u0430\u0442\u044b\"});\n            table = new JTable(tableModel);\n            loadPayments();\n\n            add(new JScrollPane(table), BorderLayout.CENTER);\n\n            // \u041f\u0430\u043d\u0435\u043b\u044c \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043e\u0431\u0449\u0435\u0433\u043e \u0434\u043e\u0445\u043e\u0434\u0430\n            JPanel bottomPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));\n            totalRevenueLabel = new JLabel(\"\u041e\u0431\u0449\u0438\u0439 \u0434\u043e\u0445\u043e\u0434: 0.00\");\n            bottomPanel.add(totalRevenueLabel);\n            add(bottomPanel, BorderLayout.SOUTH);\n\n            calculateTotalRevenue();\n        }\n\n        private void loadPayments() {\n            tableModel.setRowCount(0);\n            String query = \"SELECT p.payment_id, p.reservation_id, c.full_name, r.room_number, \" +\n                    \"p.payment_date, p.amount, p.payment_method \" +\n                    \"FROM Payments p \" +\n                    \"LEFT JOIN Reservations res ON p.reservation_id = res.reservation_id \" +\n                    \"LEFT JOIN Archived_Reservations ar ON p.reservation_id = ar.reservation_id \" +\n                    \"LEFT JOIN Customers c ON (res.customer_id = c.customer_id OR ar.customer_id = c.customer_id) \" +\n                    \"LEFT JOIN Rooms r ON (res.room_id = r.room_id OR ar.room_id = r.room_id)\";\n            try (ConnectMySQL connection = new ConnectMySQL();\n                 PreparedStatement pstmt = connection.getConnection().prepareStatement(query);\n                 ResultSet rs = pstmt.executeQuery()) {\n\n                while (rs.next()) {\n                    tableModel.addRow(new Object[] {\n                            rs.getInt(\"payment_id\"),\n                            rs.getInt(\"reservation_id\"),\n                            rs.getString(\"full_name\"),\n                            rs.getInt(\"room_number\"),\n                            rs.getDate(\"payment_date\"),\n                            rs.getBigDecimal(\"amount\"),\n                            rs.getString(\"payment_method\")\n                    });\n                }\n\n            } catch (Exception e) {\n                e.printStackTrace();\n                JOptionPane.showMessageDialog(this, \"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043f\u043b\u0430\u0442\u0435\u0436\u0435\u0439.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n            }\n        }\n\n        private void calculateTotalRevenue() {\n            String query = \"SELECT SUM(amount) AS total_revenue FROM Payments\";\n            try (ConnectMySQL connection = new ConnectMySQL();\n                 PreparedStatement pstmt = connection.getConnection().prepareStatement(query);\n                 ResultSet rs = pstmt.executeQuery()) {\n\n                if (rs.next()) {\n                    double totalRevenue = rs.getDouble(\"total_revenue\");\n                    totalRevenueLabel.setText(\"\u041e\u0431\u0449\u0438\u0439 \u0434\u043e\u0445\u043e\u0434: \" + String.format(\"%.2f\", totalRevenue));\n                }\n\n            } catch (Exception e) {\n                e.printStackTrace();\n                JOptionPane.showMessageDialog(this, \"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0440\u0430\u0441\u0447\u0435\u0442\u0435 \u043e\u0431\u0449\u0435\u0433\u043e \u0434\u043e\u0445\u043e\u0434\u0430.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n            }\n        }\n    }\n}\n\n\n\n\n\n\n\n\n\n\n\n\n// src/h/DashboardReceptionist.java\npackage h;\n\nimport javax.swing.*;\nimport javax.swing.table.DefaultTableModel;\nimport java.awt.*;\nimport java.awt.event.*;\nimport java.sql.*;\nimport org.jdatepicker.impl.*;\nimport java.util.Properties;\nimport java.text.ParseException;\nimport java.text.SimpleDateFormat;\n\npublic class DashboardReceptionist extends JFrame {\n\n    private int receptionistId; // \u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0440\u0435\u0441\u0435\u043f\u0448\u0438\u043e\u043d\u0438\u0441\u0442\u0430\n\n    public DashboardReceptionist(int receptionistId) {\n        this.receptionistId = receptionistId;\n        setTitle(\"\u041f\u0430\u043d\u0435\u043b\u044c \u0420\u0435\u0441\u0435\u043f\u0448\u0438\u043e\u043d\u0438\u0441\u0442\u0430\");\n        setSize(1000, 700);\n        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);\n        setLocationRelativeTo(null);\n\n        // \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0432\u043a\u043b\u0430\u0434\u043e\u043a\n        JTabbedPane tabbedPane = new JTabbedPane();\n\n        tabbedPane.addTab(\"\u041a\u043b\u0438\u0435\u043d\u0442\u044b\", new CustomersPanel());\n        tabbedPane.addTab(\"\u041d\u043e\u043c\u0435\u0440\u0430\", new RoomsViewPanel());\n        tabbedPane.addTab(\"\u0411\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\", new ReservationsPanel());\n        tabbedPane.addTab(\"\u041f\u043b\u0430\u0442\u0435\u0436\u0438\", new PaymentsPanel());\n        tabbedPane.addTab(\"\u0410\u0440\u0445\u0438\u0432\", new ArchivePanel());\n\n        add(tabbedPane);\n        setVisible(true);\n    }\n\n    // \u041c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u0445\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u0440\u043e\u043b\u044f\n    private String hashPassword(String password) {\n        try {\n            java.security.MessageDigest md = java.security.MessageDigest.getInstance(\"SHA-256\");\n            byte[] hashBytes = md.digest(password.getBytes());\n\n            StringBuilder sb = new StringBuilder();\n            for(byte b : hashBytes){\n                sb.append(String.format(\"%02x\", b));\n            }\n\n            return sb.toString();\n        } catch (java.security.NoSuchAlgorithmException e) {\n            e.printStackTrace();\n            return null;\n        }\n    }\n\n    // \u041f\u0430\u043d\u0435\u043b\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c\u0438\n    class CustomersPanel extends JPanel {\n        private JTable table;\n        private DefaultTableModel tableModel;\n        private JButton addButton, editButton, deleteButton, refreshButton;\n\n        public CustomersPanel() {\n            setLayout(new BorderLayout());\n\n            // \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b\n            tableModel = new DefaultTableModel();\n            tableModel.setColumnIdentifiers(new String[] {\"ID\", \"\u041f\u043e\u043b\u043d\u043e\u0435 \u0438\u043c\u044f\", \"\u0422\u0435\u043b\u0435\u0444\u043e\u043d\", \"Email\", \"\u041f\u043e\u043b\", \"\u0421\u0442\u0440\u0430\u043d\u0430\", \"\u0410\u0434\u0440\u0435\u0441\"});\n            table = new JTable(tableModel);\n            loadCustomers();\n\n            add(new JScrollPane(table), BorderLayout.CENTER);\n\n            // \u041a\u043d\u043e\u043f\u043a\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f\n            JPanel buttonPanel = new JPanel();\n            addButton = new JButton(\"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c\");\n            editButton = new JButton(\"\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\");\n            deleteButton = new JButton(\"\u0423\u0434\u0430\u043b\u0438\u0442\u044c\");\n            refreshButton = new JButton(\"\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c\");\n            buttonPanel.add(addButton);\n            buttonPanel.add(editButton);\n            buttonPanel.add(deleteButton);\n            buttonPanel.add(refreshButton);\n\n            add(buttonPanel, BorderLayout.SOUTH);\n\n            // \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439\n            addButton.addActionListener(e -> openCustomerForm(null));\n            editButton.addActionListener(e -> {\n                int selectedRow = table.getSelectedRow();\n                if (selectedRow >= 0) {\n                    int customerId = (int)tableModel.getValueAt(selectedRow, 0);\n                    openCustomerForm(customerId);\n                } else {\n                    JOptionPane.showMessageDialog(this, \"\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0434\u043b\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.\");\n                }\n            });\n            deleteButton.addActionListener(e -> {\n                int selectedRow = table.getSelectedRow();\n                if (selectedRow >= 0) {\n                    int customerId = (int)tableModel.getValueAt(selectedRow, 0);\n                    int confirm = JOptionPane.showConfirmDialog(this, \"\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430?\", \"\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435\", JOptionPane.YES_NO_OPTION);\n                    if (confirm == JOptionPane.YES_OPTION) {\n                        deleteCustomer(customerId);\n                        loadCustomers();\n                    }\n                } else {\n                    JOptionPane.showMessageDialog(this, \"\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f.\");\n                }\n            });\n            refreshButton.addActionListener(e -> loadCustomers());\n        }\n\n        private void loadCustomers() {\n            tableModel.setRowCount(0);\n            String query = \"SELECT customer_id, full_name, phone, email, gender, country, address FROM Customers\";\n            try (ConnectMySQL connection = new ConnectMySQL();\n                 PreparedStatement pstmt = connection.getConnection().prepareStatement(query);\n                 ResultSet rs = pstmt.executeQuery()) {\n\n                while (rs.next()) {\n                    tableModel.addRow(new Object[] {\n                            rs.getInt(\"customer_id\"),\n                            rs.getString(\"full_name\"),\n                            rs.getString(\"phone\"),\n                            rs.getString(\"email\"),\n                            rs.getString(\"gender\"),\n                            rs.getString(\"country\"),\n                            rs.getString(\"address\")\n                    });\n                }\n\n            } catch (Exception e) {\n                e.printStackTrace();\n                JOptionPane.showMessageDialog(this, \"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n            }\n        }\n\n        private void openCustomerForm(Integer customerId) {\n            new CustomerForm(customerId, this);\n        }\n\n        private void deleteCustomer(int customerId) {\n            String query = \"DELETE FROM Customers WHERE customer_id = ?\";\n            try (ConnectMySQL connection = new ConnectMySQL();\n                 PreparedStatement pstmt = connection.getConnection().prepareStatement(query)) {\n\n                pstmt.setInt(1, customerId);\n                pstmt.executeUpdate();\n\n                JOptionPane.showMessageDialog(this, \"\u041a\u043b\u0438\u0435\u043d\u0442 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0443\u0434\u0430\u043b\u0435\u043d.\");\n\n            } catch (SQLException e) {\n                e.printStackTrace();\n                JOptionPane.showMessageDialog(this, \"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0430.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n            }\n        }\n    }\n\n    // \u0424\u043e\u0440\u043c\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f/\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0430\n    class CustomerForm extends JDialog implements ActionListener {\n        private JTextField nameField, phoneField, emailField, countryField, addressField;\n        private JComboBox<String> genderComboBox;\n        private JButton saveButton, cancelButton;\n        private Integer customerId; // Null \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u043d\u0435 null \u0434\u043b\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\n        private CustomersPanel parentPanel;\n\n        public CustomerForm(Integer customerId, CustomersPanel parentPanel) {\n            this.customerId = customerId;\n            this.parentPanel = parentPanel;\n\n            setTitle(customerId == null ? \"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u041a\u043b\u0438\u0435\u043d\u0442\u0430\" : \"\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u041a\u043b\u0438\u0435\u043d\u0442\u0430\");\n            setSize(500, 500);\n            setLocationRelativeTo(null);\n            setModal(true);\n            setLayout(new GridBagLayout());\n            GridBagConstraints gbc = new GridBagConstraints();\n            gbc.fill = GridBagConstraints.HORIZONTAL;\n            gbc.insets = new Insets(10,10,10,10);\n\n            // \u041f\u043e\u043b\u043d\u043e\u0435 \u0438\u043c\u044f\n            gbc.gridx = 0;\n            gbc.gridy = 0;\n            add(new JLabel(\"\u041f\u043e\u043b\u043d\u043e\u0435 \u0438\u043c\u044f:\"), gbc);\n            nameField = new JTextField(20);\n            gbc.gridx = 1;\n            add(nameField, gbc);\n\n            // \u0422\u0435\u043b\u0435\u0444\u043e\u043d\n            gbc.gridx = 0;\n            gbc.gridy++;\n            add(new JLabel(\"\u0422\u0435\u043b\u0435\u0444\u043e\u043d:\"), gbc);\n            phoneField = new JTextField(20);\n            gbc.gridx = 1;\n            add(phoneField, gbc);\n\n            // Email\n            gbc.gridx = 0;\n            gbc.gridy++;\n            add(new JLabel(\"Email:\"), gbc);\n            emailField = new JTextField(20);\n            gbc.gridx = 1;\n            add(emailField, gbc);\n\n            // \u041f\u043e\u043b\n            gbc.gridx = 0;\n            gbc.gridy++;\n            add(new JLabel(\"\u041f\u043e\u043b:\"), gbc);\n            genderComboBox = new JComboBox<>(new String[] {\"\u041c\u0443\u0436\u0441\u043a\u043e\u0439\", \"\u0416\u0435\u043d\u0441\u043a\u0438\u0439\"});\n            gbc.gridx = 1;\n            add(genderComboBox, gbc);\n\n            // \u0421\u0442\u0440\u0430\u043d\u0430\n            gbc.gridx = 0;\n            gbc.gridy++;\n            add(new JLabel(\"\u0421\u0442\u0440\u0430\u043d\u0430:\"), gbc);\n            countryField = new JTextField(20);\n            gbc.gridx = 1;\n            add(countryField, gbc);\n\n            // \u0410\u0434\u0440\u0435\u0441\n            gbc.gridx = 0;\n            gbc.gridy++;\n            add(new JLabel(\"\u0410\u0434\u0440\u0435\u0441:\"), gbc);\n            addressField = new JTextField(20);\n            gbc.gridx = 1;\n            add(addressField, gbc);\n\n            // \u041a\u043d\u043e\u043f\u043a\u0438\n            gbc.gridx = 0;\n            gbc.gridy++;\n            gbc.gridwidth = 2;\n            JPanel buttonPanel = new JPanel();\n            saveButton = new JButton(\"\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c\");\n            cancelButton = new JButton(\"\u041e\u0442\u043c\u0435\u043d\u0430\");\n            buttonPanel.add(saveButton);\n            buttonPanel.add(cancelButton);\n            add(buttonPanel, gbc);\n\n            // \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\n            if (customerId != null) {\n                loadCustomerData();\n            }\n\n            // \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438\n            saveButton.addActionListener(this);\n            cancelButton.addActionListener(e -> dispose());\n\n            setVisible(true);\n        }\n\n        private void loadCustomerData() {\n            String query = \"SELECT * FROM Customers WHERE customer_id = ?\";\n            try (ConnectMySQL connection = new ConnectMySQL();\n                 PreparedStatement pstmt = connection.getConnection().prepareStatement(query)) {\n\n                pstmt.setInt(1, customerId);\n                try (ResultSet rs = pstmt.executeQuery()) {\n                    if (rs.next()) {\n                        nameField.setText(rs.getString(\"full_name\"));\n                        phoneField.setText(rs.getString(\"phone\"));\n                        emailField.setText(rs.getString(\"email\"));\n                        genderComboBox.setSelectedItem(rs.getString(\"gender\"));\n                        countryField.setText(rs.getString(\"country\"));\n                        addressField.setText(rs.getString(\"address\"));\n                    }\n                }\n\n            } catch (Exception e) {\n                e.printStackTrace();\n                JOptionPane.showMessageDialog(this, \"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u0430.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n            }\n        }\n\n        @Override\n        public void actionPerformed(ActionEvent e) {\n            if (e.getSource() == saveButton) {\n                String fullName = nameField.getText().trim();\n                String phone = phoneField.getText().trim();\n                String email = emailField.getText().trim();\n                String gender = (String)genderComboBox.getSelectedItem();\n                String country = countryField.getText().trim();\n                String address = addressField.getText().trim();\n\n                // \u0412\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f\n                if (fullName.isEmpty() || phone.isEmpty() || email.isEmpty() || gender == null || country.isEmpty() || address.isEmpty()) {\n                    JOptionPane.showMessageDialog(this, \"\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u0432\u0441\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043b\u044f.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n                    return;\n                }\n\n                try (ConnectMySQL connection = new ConnectMySQL()) {\n                    Connection conn = connection.getConnection();\n                    PreparedStatement pstmt;\n                    if (customerId == null) {\n                        // \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430\n                        String query = \"INSERT INTO Customers (full_name, phone, email, gender, country, address, created_at, updated_at, receptionist_id) \" +\n                                \"VALUES (?, ?, ?, ?, ?, ?, NOW(), NOW(), ?)\";\n                        pstmt = conn.prepareStatement(query);\n                        pstmt.setString(1, fullName);\n                        pstmt.setString(2, phone);\n                        pstmt.setString(3, email);\n                        pstmt.setString(4, gender);\n                        pstmt.setString(5, country);\n                        pstmt.setString(6, address);\n                        pstmt.setInt(7, receptionistId);\n                    } else {\n                        // \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430\n                        String query = \"UPDATE Customers SET full_name = ?, phone = ?, email = ?, gender = ?, country = ?, address = ?, updated_at = NOW() WHERE customer_id = ?\";\n                        pstmt = conn.prepareStatement(query);\n                        pstmt.setString(1, fullName);\n                        pstmt.setString(2, phone);\n                        pstmt.setString(3, email);\n                        pstmt.setString(4, gender);\n                        pstmt.setString(5, country);\n                        pstmt.setString(6, address);\n                        pstmt.setInt(7, customerId);\n                    }\n\n                    pstmt.executeUpdate();\n                    JOptionPane.showMessageDialog(this, \"\u0414\u0430\u043d\u043d\u044b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044b.\");\n                    parentPanel.loadCustomers();\n                    dispose();\n\n                } catch (SQLIntegrityConstraintViolationException ex) {\n                    JOptionPane.showMessageDialog(this, \"\u0414\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430 \u0438\u043b\u0438 email.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n                } catch (Exception ex) {\n                    ex.printStackTrace();\n                    JOptionPane.showMessageDialog(this, \"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u0430.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n                }\n            }\n        }\n    }\n\n    // \u041f\u0430\u043d\u0435\u043b\u044c \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u043d\u043e\u043c\u0435\u0440\u043e\u0432\n    class RoomsViewPanel extends JPanel {\n        private JTable table;\n        private DefaultTableModel tableModel;\n        private JButton refreshButton;\n\n        public RoomsViewPanel() {\n            setLayout(new BorderLayout());\n\n            // \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b\n            tableModel = new DefaultTableModel();\n            tableModel.setColumnIdentifiers(new String[] {\"\u041d\u043e\u043c\u0435\u0440 ID\", \"\u041d\u043e\u043c\u0435\u0440 \u043a\u043e\u043c\u043d\u0430\u0442\u044b\", \"\u0421\u0442\u0430\u0442\u0443\u0441\", \"\u0426\u0435\u043d\u0430\", \"\u0422\u0438\u043f \u043a\u0440\u043e\u0432\u0430\u0442\u0438\", \"\u0422\u0438\u043f \u043d\u043e\u043c\u0435\u0440\u0430\"});\n            table = new JTable(tableModel);\n            loadRooms();\n\n            add(new JScrollPane(table), BorderLayout.CENTER);\n\n            // \u041a\u043d\u043e\u043f\u043a\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f\n            JPanel buttonPanel = new JPanel();\n            refreshButton = new JButton(\"\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c\");\n            buttonPanel.add(refreshButton);\n            add(buttonPanel, BorderLayout.SOUTH);\n\n            refreshButton.addActionListener(e -> loadRooms());\n        }\n\n        private void loadRooms() {\n            tableModel.setRowCount(0);\n            String query = \"SELECT room_id, room_number, status, price, bed_type, room_type FROM Rooms\";\n            try (ConnectMySQL connection = new ConnectMySQL();\n                 PreparedStatement pstmt = connection.getConnection().prepareStatement(query);\n                 ResultSet rs = pstmt.executeQuery()) {\n\n                while (rs.next()) {\n                    tableModel.addRow(new Object[] {\n                            rs.getInt(\"room_id\"),\n                            rs.getInt(\"room_number\"),\n                            rs.getString(\"status\"),\n                            rs.getBigDecimal(\"price\"),\n                            rs.getString(\"bed_type\"),\n                            rs.getString(\"room_type\")\n                    });\n                }\n\n            } catch (Exception e) {\n                e.printStackTrace();\n                JOptionPane.showMessageDialog(this, \"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043d\u043e\u043c\u0435\u0440\u043e\u0432.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n            }\n        }\n    }\n\n    // \u041f\u0430\u043d\u0435\u043b\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\u043c\u0438\n    class ReservationsPanel extends JPanel {\n        private JTable table;\n        private DefaultTableModel tableModel;\n        private JButton addButton, editButton, refreshButton, checkInButton, checkOutButton;\n\n        public ReservationsPanel() {\n            setLayout(new BorderLayout());\n\n            // \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b\n            tableModel = new DefaultTableModel();\n            tableModel.setColumnIdentifiers(new String[] {\"ID\", \"\u041a\u043b\u0438\u0435\u043d\u0442\", \"\u041d\u043e\u043c\u0435\u0440\", \"\u0414\u0430\u0442\u0430 \u0437\u0430\u0435\u0437\u0434\u0430\", \"\u0414\u0430\u0442\u0430 \u0432\u044b\u0435\u0437\u0434\u0430\", \"\u0421\u0442\u0430\u0442\u0443\u0441\", \"\u0421\u0443\u043c\u043c\u0430\"});\n            table = new JTable(tableModel);\n            loadReservations();\n\n            add(new JScrollPane(table), BorderLayout.CENTER);\n\n            // \u041a\u043d\u043e\u043f\u043a\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f\n            JPanel buttonPanel = new JPanel();\n            addButton = new JButton(\"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c\");\n            editButton = new JButton(\"\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\");\n            checkInButton = new JButton(\"\u0417\u0430\u0441\u0435\u043b\u0438\u0442\u044c\");\n            checkOutButton = new JButton(\"\u0412\u044b\u0441\u0435\u043b\u0438\u0442\u044c\");\n            refreshButton = new JButton(\"\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c\");\n            buttonPanel.add(addButton);\n            buttonPanel.add(editButton);\n            buttonPanel.add(checkInButton);\n            buttonPanel.add(checkOutButton);\n            buttonPanel.add(refreshButton);\n\n            add(buttonPanel, BorderLayout.SOUTH);\n\n            // \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439\n            addButton.addActionListener(e -> openReservationForm(null));\n            editButton.addActionListener(e -> {\n                int selectedRow = table.getSelectedRow();\n                if (selectedRow >= 0) {\n                    int reservationId = (int)tableModel.getValueAt(selectedRow, 0);\n                    openReservationForm(reservationId);\n                } else {\n                    JOptionPane.showMessageDialog(this, \"\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.\");\n                }\n            });\n            checkInButton.addActionListener(e -> {\n                int selectedRow = table.getSelectedRow();\n                if (selectedRow >= 0) {\n                    int reservationId = (int)tableModel.getValueAt(selectedRow, 0);\n                    checkIn(reservationId);\n                    loadReservations();\n                } else {\n                    JOptionPane.showMessageDialog(this, \"\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u0437\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u044f.\");\n                }\n            });\n            checkOutButton.addActionListener(e -> {\n                int selectedRow = table.getSelectedRow();\n                if (selectedRow >= 0) {\n                    int reservationId = (int)tableModel.getValueAt(selectedRow, 0);\n                    checkOut(reservationId);\n                    loadReservations();\n                } else {\n                    JOptionPane.showMessageDialog(this, \"\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u0432\u044b\u0441\u0435\u043b\u0435\u043d\u0438\u044f.\");\n                }\n            });\n            refreshButton.addActionListener(e -> loadReservations());\n        }\n\n        private void loadReservations() {\n            tableModel.setRowCount(0);\n            String query = \"SELECT res.reservation_id, c.full_name, r.room_number, res.check_in, res.check_out, res.status, res.total_amount \" +\n                    \"FROM Reservations res \" +\n                    \"JOIN Customers c ON res.customer_id = c.customer_id \" +\n                    \"JOIN Rooms r ON res.room_id = r.room_id\";\n            try (ConnectMySQL connection = new ConnectMySQL();\n                 PreparedStatement pstmt = connection.getConnection().prepareStatement(query);\n                 ResultSet rs = pstmt.executeQuery()) {\n\n                while (rs.next()) {\n                    tableModel.addRow(new Object[] {\n                            rs.getInt(\"reservation_id\"),\n                            rs.getString(\"full_name\"),\n                            rs.getInt(\"room_number\"),\n                            rs.getDate(\"check_in\"),\n                            rs.getDate(\"check_out\"),\n                            rs.getString(\"status\"),\n                            rs.getBigDecimal(\"total_amount\")\n                    });\n                }\n\n            } catch (Exception e) {\n                e.printStackTrace();\n                JOptionPane.showMessageDialog(this, \"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0439.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n            }\n        }\n\n        private void openReservationForm(Integer reservationId) {\n            new ReservationForm(reservationId, this, receptionistId);\n        }\n\n        private void deleteReservation(int reservationId) {\n            String query = \"DELETE FROM Reservations WHERE reservation_id = ?\";\n            try (ConnectMySQL connection = new ConnectMySQL();\n                 PreparedStatement pstmt = connection.getConnection().prepareStatement(query)) {\n\n                pstmt.setInt(1, reservationId);\n                pstmt.executeUpdate();\n\n                JOptionPane.showMessageDialog(this, \"\u0411\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u043e.\");\n\n            } catch (SQLException e) {\n                e.printStackTrace();\n                JOptionPane.showMessageDialog(this, \"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n            }\n        }\n\n        private void checkIn(int reservationId) {\n            // \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\n            String updateQuery = \"UPDATE Reservations SET status = '\u0417\u0430\u0441\u0435\u043b\u0451\u043d', updated_at = NOW() WHERE reservation_id = ?\";\n            try (ConnectMySQL connection = new ConnectMySQL();\n                 PreparedStatement pstmt = connection.getConnection().prepareStatement(updateQuery)) {\n\n                pstmt.setInt(1, reservationId);\n                pstmt.executeUpdate();\n\n                JOptionPane.showMessageDialog(this, \"\u041a\u043b\u0438\u0435\u043d\u0442 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0437\u0430\u0441\u0435\u043b\u0435\u043d.\");\n\n            } catch (SQLException e) {\n                e.printStackTrace();\n                JOptionPane.showMessageDialog(this, \"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0437\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0430.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n            }\n        }\n\n        private void checkOut(int reservationId) {\n            String selectQuery = \"SELECT * FROM Reservations WHERE reservation_id = ?\";\n            String updateQuery = \"UPDATE Reservations SET status = '\u0412\u044b\u0441\u0435\u043b\u0435\u043d', updated_at = NOW() WHERE reservation_id = ?\";\n            String insertArchiveQuery = \"INSERT INTO Archived_Reservations (reservation_id, customer_id, room_id, check_in, check_out, status, total_amount, created_at, updated_at) \" +\n                    \"VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)\";\n            String deleteQuery = \"DELETE FROM Reservations WHERE reservation_id = ?\";\n\n            Connection conn = null;\n            PreparedStatement selectStmt = null;\n            PreparedStatement updateStmt = null;\n            PreparedStatement insertArchiveStmt = null;\n            PreparedStatement deleteStmt = null;\n\n            try {\n                ConnectMySQL connection = new ConnectMySQL();\n                conn = connection.getConnection();\n                conn.setAutoCommit(false); // \u041d\u0430\u0447\u0430\u043b\u043e \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438\n\n                // \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\n                selectStmt = conn.prepareStatement(selectQuery);\n                selectStmt.setInt(1, reservationId);\n                ResultSet rs = selectStmt.executeQuery();\n\n                if (!rs.next()) {\n                    JOptionPane.showMessageDialog(this, \"\u0411\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n                    return;\n                }\n\n                int customerId = rs.getInt(\"customer_id\");\n                int roomId = rs.getInt(\"room_id\");\n                Date checkIn = rs.getDate(\"check_in\");\n                Date checkOut = rs.getDate(\"check_out\");\n                String status = rs.getString(\"status\");\n                double totalAmount = rs.getDouble(\"total_amount\");\n                Timestamp createdAt = rs.getTimestamp(\"created_at\");\n                Timestamp updatedAt = rs.getTimestamp(\"updated_at\");\n\n                // \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\n                updateStmt = conn.prepareStatement(updateQuery);\n                updateStmt.setInt(1, reservationId);\n                updateStmt.executeUpdate();\n\n                // \u0412\u0441\u0442\u0430\u0432\u043a\u0430 \u0432 \u0430\u0440\u0445\u0438\u0432\n                insertArchiveStmt = conn.prepareStatement(insertArchiveQuery);\n                insertArchiveStmt.setInt(1, reservationId);\n                insertArchiveStmt.setInt(2, customerId);\n                insertArchiveStmt.setInt(3, roomId);\n                insertArchiveStmt.setDate(4, checkIn);\n                insertArchiveStmt.setDate(5, checkOut);\n                insertArchiveStmt.setString(6, \"\u0412\u044b\u0441\u0435\u043b\u0435\u043d\");\n                insertArchiveStmt.setDouble(7, totalAmount);\n                insertArchiveStmt.setTimestamp(8, createdAt);\n                insertArchiveStmt.setTimestamp(9, updatedAt);\n                insertArchiveStmt.executeUpdate();\n\n                // \u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0438\u0437 \u0442\u0435\u043a\u0443\u0449\u0438\u0445 \u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0439\n                deleteStmt = conn.prepareStatement(deleteQuery);\n                deleteStmt.setInt(1, reservationId);\n                deleteStmt.executeUpdate();\n\n                // \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u043d\u043e\u043c\u0435\u0440\u0430 \u043d\u0430 '\u0414\u043e\u0441\u0442\u0443\u043f\u0435\u043d'\n                String updateRoomQuery = \"UPDATE Rooms SET status = '\u0414\u043e\u0441\u0442\u0443\u043f\u0435\u043d' WHERE room_id = ?\";\n                try (PreparedStatement pstmt = conn.prepareStatement(updateRoomQuery)) {\n                    pstmt.setInt(1, roomId);\n                    pstmt.executeUpdate();\n                }\n\n                conn.commit(); // \u041a\u043e\u043c\u043c\u0438\u0442 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438\n                JOptionPane.showMessageDialog(this, \"\u041a\u043b\u0438\u0435\u043d\u0442 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0432\u044b\u0441\u0435\u043b\u0435\u043d.\");\n\n            } catch (SQLException e) {\n                e.printStackTrace();\n                if (conn != null) {\n                    try {\n                        conn.rollback(); // \u041e\u0442\u043a\u0430\u0442 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u043f\u0440\u0438 \u043e\u0448\u0438\u0431\u043a\u0435\n                    } catch (SQLException ex) {\n                        ex.printStackTrace();\n                    }\n                }\n                JOptionPane.showMessageDialog(this, \"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0432\u044b\u0441\u0435\u043b\u0435\u043d\u0438\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0430.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n            } finally {\n                try {\n                    if (selectStmt != null) selectStmt.close();\n                    if (updateStmt != null) updateStmt.close();\n                    if (insertArchiveStmt != null) insertArchiveStmt.close();\n                    if (deleteStmt != null) deleteStmt.close();\n                    if (conn != null) conn.setAutoCommit(true);\n                    if (conn != null) conn.close();\n                } catch (SQLException e) {\n                    e.printStackTrace();\n                }\n            }\n        }\n    }\n\n    // \u0424\u043e\u0440\u043c\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f/\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\n    class ReservationForm extends JDialog implements ActionListener {\n        private JComboBox<String> customerComboBox, roomComboBox;\n        private JDatePickerImpl checkInDatePicker, checkOutDatePicker;\n        private JButton saveButton, cancelButton;\n        private Integer reservationId; // Null \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u043d\u0435 null \u0434\u043b\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\n        private ReservationsPanel parentPanel;\n        private int receptionistId;\n\n        public ReservationForm(Integer reservationId, ReservationsPanel parentPanel, int receptionistId) {\n            this.reservationId = reservationId;\n            this.parentPanel = parentPanel;\n            this.receptionistId = receptionistId;\n\n            setTitle(reservationId == null ? \"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0411\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\" : \"\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0411\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\");\n            setSize(500, 400);\n            setLocationRelativeTo(null);\n            setModal(true);\n            setLayout(new GridBagLayout());\n            GridBagConstraints gbc = new GridBagConstraints();\n            gbc.fill = GridBagConstraints.HORIZONTAL;\n            gbc.insets = new Insets(10,10,10,10);\n\n            // \u041a\u043b\u0438\u0435\u043d\u0442\n            gbc.gridx = 0;\n            gbc.gridy = 0;\n            add(new JLabel(\"\u041a\u043b\u0438\u0435\u043d\u0442:\"), gbc);\n            customerComboBox = new JComboBox<>();\n            loadCustomers();\n            gbc.gridx = 1;\n            add(customerComboBox, gbc);\n\n            // \u041d\u043e\u043c\u0435\u0440\n            gbc.gridx = 0;\n            gbc.gridy++;\n            add(new JLabel(\"\u041d\u043e\u043c\u0435\u0440:\"), gbc);\n            roomComboBox = new JComboBox<>();\n            loadAvailableRooms();\n            gbc.gridx = 1;\n            add(roomComboBox, gbc);\n\n            // \u0414\u0430\u0442\u0430 \u0437\u0430\u0435\u0437\u0434\u0430\n            gbc.gridx = 0;\n            gbc.gridy++;\n            add(new JLabel(\"\u0414\u0430\u0442\u0430 \u0437\u0430\u0435\u0437\u0434\u0430:\"), gbc);\n            checkInDatePicker = createDatePicker();\n            gbc.gridx = 1;\n            add(checkInDatePicker, gbc);\n\n            // \u0414\u0430\u0442\u0430 \u0432\u044b\u0435\u0437\u0434\u0430\n            gbc.gridx = 0;\n            gbc.gridy++;\n            add(new JLabel(\"\u0414\u0430\u0442\u0430 \u0432\u044b\u0435\u0437\u0434\u0430:\"), gbc);\n            checkOutDatePicker = createDatePicker();\n            gbc.gridx = 1;\n            add(checkOutDatePicker, gbc);\n\n            // \u041a\u043d\u043e\u043f\u043a\u0438\n            gbc.gridx = 0;\n            gbc.gridy++;\n            gbc.gridwidth = 2;\n            JPanel buttonPanel = new JPanel();\n            saveButton = new JButton(\"\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c\");\n            cancelButton = new JButton(\"\u041e\u0442\u043c\u0435\u043d\u0430\");\n            buttonPanel.add(saveButton);\n            buttonPanel.add(cancelButton);\n            add(buttonPanel, gbc);\n\n            // \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\n            if (reservationId != null) {\n                loadReservationData();\n            }\n\n            // \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438\n            saveButton.addActionListener(this);\n            cancelButton.addActionListener(e -> dispose());\n\n            setVisible(true);\n        }\n\n        private void loadCustomers() {\n            String query = \"SELECT customer_id, full_name FROM Customers\";\n            try (ConnectMySQL connection = new ConnectMySQL();\n                 PreparedStatement pstmt = connection.getConnection().prepareStatement(query);\n                 ResultSet rs = pstmt.executeQuery()) {\n\n                while (rs.next()) {\n                    customerComboBox.addItem(rs.getInt(\"customer_id\") + \" - \" + rs.getString(\"full_name\"));\n                }\n\n            } catch (Exception e) {\n                e.printStackTrace();\n                JOptionPane.showMessageDialog(this, \"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n            }\n        }\n\n        private void loadAvailableRooms() {\n            // \u0423\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0432\u0441\u0435\u0445 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u043d\u043e\u043c\u0435\u0440\u043e\u0432\n            String query = \"SELECT room_id, room_number FROM Rooms WHERE status = '\u0414\u043e\u0441\u0442\u0443\u043f\u0435\u043d'\";\n            try (ConnectMySQL connection = new ConnectMySQL();\n                 PreparedStatement pstmt = connection.getConnection().prepareStatement(query);\n                 ResultSet rs = pstmt.executeQuery()) {\n\n                while (rs.next()) {\n                    roomComboBox.addItem(rs.getInt(\"room_id\") + \" - \" + rs.getInt(\"room_number\"));\n                }\n\n            } catch (Exception e) {\n                e.printStackTrace();\n                JOptionPane.showMessageDialog(this, \"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043d\u043e\u043c\u0435\u0440\u043e\u0432.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n            }\n        }\n\n        private JDatePickerImpl createDatePicker() {\n            UtilDateModel model = new UtilDateModel();\n            Properties p = new Properties();\n            p.put(\"text.today\", \"\u0421\u0435\u0433\u043e\u0434\u043d\u044f\");\n            p.put(\"text.month\", \"\u041c\u0435\u0441\u044f\u0446\");\n            p.put(\"text.year\", \"\u0413\u043e\u0434\");\n            JDatePanelImpl datePanel = new JDatePanelImpl(model, p);\n            return new JDatePickerImpl(datePanel, new DateLabelFormatter());\n        }\n\n        private void loadReservationData() {\n            String query = \"SELECT * FROM Reservations WHERE reservation_id = ?\";\n            try (ConnectMySQL connection = new ConnectMySQL();\n                 PreparedStatement pstmt = connection.getConnection().prepareStatement(query)) {\n\n                pstmt.setInt(1, reservationId);\n                try (ResultSet rs = pstmt.executeQuery()) {\n                    if (rs.next()) {\n                        customerComboBox.setSelectedItem(rs.getInt(\"customer_id\") + \" - \" + getCustomerName(rs.getInt(\"customer_id\")));\n                        roomComboBox.setSelectedItem(rs.getInt(\"room_id\") + \" - \" + getRoomNumber(rs.getInt(\"room_id\")));\n                        checkInDatePicker.getModel().setDate(rs.getDate(\"check_in\").toLocalDate().getYear(), rs.getDate(\"check_in\").toLocalDate().getMonthValue() - 1, rs.getDate(\"check_in\").toLocalDate().getDayOfMonth());\n                        checkInDatePicker.getModel().setSelected(true);\n                        checkOutDatePicker.getModel().setDate(rs.getDate(\"check_out\").toLocalDate().getYear(), rs.getDate(\"check_out\").toLocalDate().getMonthValue() - 1, rs.getDate(\"check_out\").toLocalDate().getDayOfMonth());\n                        checkOutDatePicker.getModel().setSelected(true);\n                    }\n                }\n\n            } catch (Exception e) {\n                e.printStackTrace();\n                JOptionPane.showMessageDialog(this, \"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n            }\n        }\n\n        private String getCustomerName(int customerId) {\n            String name = \"\";\n            String query = \"SELECT full_name FROM Customers WHERE customer_id = ?\";\n            try (ConnectMySQL connection = new ConnectMySQL();\n                 PreparedStatement pstmt = connection.getConnection().prepareStatement(query)) {\n\n                pstmt.setInt(1, customerId);\n                try (ResultSet rs = pstmt.executeQuery()) {\n                    if (rs.next()) {\n                        name = rs.getString(\"full_name\");\n                    }\n                }\n\n            } catch (Exception e) {\n                e.printStackTrace();\n            }\n            return name;\n        }\n\n        private int getRoomNumber(int roomId) {\n            int roomNumber = -1;\n            String query = \"SELECT room_number FROM Rooms WHERE room_id = ?\";\n            try (ConnectMySQL connection = new ConnectMySQL();\n                 PreparedStatement pstmt = connection.getConnection().prepareStatement(query)) {\n\n                pstmt.setInt(1, roomId);\n                try (ResultSet rs = pstmt.executeQuery()) {\n                    if (rs.next()) {\n                        roomNumber = rs.getInt(\"room_number\");\n                    }\n                }\n\n            } catch (Exception e) {\n                e.printStackTrace();\n            }\n            return roomNumber;\n        }\n\n        @Override\n        public void actionPerformed(ActionEvent e) {\n            if (e.getSource() == saveButton) {\n                String customerStr = (String)customerComboBox.getSelectedItem();\n                String roomStr = (String)roomComboBox.getSelectedItem();\n                java.util.Date checkInDate = (java.util.Date)checkInDatePicker.getModel().getValue();\n                java.util.Date checkOutDate = (java.util.Date)checkOutDatePicker.getModel().getValue();\n\n                if (customerStr == null || roomStr == null || checkInDate == null || checkOutDate == null) {\n                    JOptionPane.showMessageDialog(this, \"\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u0432\u0441\u0435 \u043f\u043e\u043b\u044f.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n                    return;\n                }\n\n                int customerId = Integer.parseInt(customerStr.split(\" - \")[0]);\n                int roomId = Integer.parseInt(roomStr.split(\" - \")[0]);\n\n                java.sql.Date checkInSqlDate = new java.sql.Date(checkInDate.getTime());\n                java.sql.Date checkOutSqlDate = new java.sql.Date(checkOutDate.getTime());\n\n                // \u0412\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u0434\u0430\u0442\n                if (!validateDates(checkInSqlDate, checkOutSqlDate)) {\n                    JOptionPane.showMessageDialog(this, \"\u0414\u0430\u0442\u0430 \u0432\u044b\u0435\u0437\u0434\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043f\u043e\u0437\u0436\u0435 \u0434\u0430\u0442\u044b \u0437\u0430\u0435\u0437\u0434\u0430.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n                    return;\n                }\n\n                // \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438 \u043d\u043e\u043c\u0435\u0440\u0430\n                if (!isRoomAvailable(roomId, checkInSqlDate, checkOutSqlDate, reservationId)) {\n                    JOptionPane.showMessageDialog(this, \"\u041d\u043e\u043c\u0435\u0440 \u0443\u0436\u0435 \u0437\u0430\u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d \u043d\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u0442\u044b.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n                    return;\n                }\n\n                // \u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u0449\u0435\u0439 \u0441\u0443\u043c\u043c\u044b\n                double totalAmount = calculateTotalAmount(roomId, checkInSqlDate, checkOutSqlDate);\n\n                try (ConnectMySQL connection = new ConnectMySQL()) {\n                    Connection conn = connection.getConnection();\n                    PreparedStatement pstmt;\n                    if (reservationId == null) {\n                        // \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\n                        String query = \"INSERT INTO Reservations (customer_id, room_id, check_in, check_out, status, total_amount, created_at, updated_at, receptionist_id) \" +\n                                \"VALUES (?, ?, ?, ?, '\u0417\u0430\u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d', ?, NOW(), NOW(), ?)\";\n                        pstmt = conn.prepareStatement(query);\n                        pstmt.setInt(1, customerId);\n                        pstmt.setInt(2, roomId);\n                        pstmt.setDate(3, checkInSqlDate);\n                        pstmt.setDate(4, checkOutSqlDate);\n                        pstmt.setDouble(5, totalAmount);\n                        pstmt.setInt(6, receptionistId);\n                    } else {\n                        // \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\n                        String query = \"UPDATE Reservations SET customer_id = ?, room_id = ?, check_in = ?, check_out = ?, status = '\u0417\u0430\u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d', total_amount = ?, updated_at = NOW(), receptionist_id = ? WHERE reservation_id = ?\";\n                        pstmt = conn.prepareStatement(query);\n                        pstmt.setInt(1, customerId);\n                        pstmt.setInt(2, roomId);\n                        pstmt.setDate(3, checkInSqlDate);\n                        pstmt.setDate(4, checkOutSqlDate);\n                        pstmt.setDouble(5, totalAmount);\n                        pstmt.setInt(6, receptionistId);\n                        pstmt.setInt(7, reservationId);\n                    }\n\n                    pstmt.executeUpdate();\n                    JOptionPane.showMessageDialog(this, \"\u0411\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043e.\");\n                    parentPanel.loadReservations();\n                    dispose();\n\n                } catch (SQLException ex) {\n                    ex.printStackTrace();\n                    JOptionPane.showMessageDialog(this, \"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438 \u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n                }\n            }\n        }\n\n        private boolean validateDates(java.sql.Date checkIn, java.sql.Date checkOut) {\n            return checkOut.after(checkIn);\n        }\n\n        private boolean isRoomAvailable(int roomId, java.sql.Date checkIn, java.sql.Date checkOut, Integer currentReservationId) {\n            String query = \"SELECT COUNT(*) AS count FROM Reservations WHERE room_id = ? AND status NOT IN ('\u041e\u0442\u043c\u0435\u043d\u0451\u043d', '\u0412\u044b\u0441\u0435\u043b\u0435\u043d') AND (\" +\n                    \"(check_in <= ? AND check_out > ?) OR \" +\n                    \"(check_in < ? AND check_out >= ?) OR \" +\n                    \"(check_in >= ? AND check_out <= ?))\";\n            try (ConnectMySQL connection = new ConnectMySQL();\n                 PreparedStatement pstmt = connection.getConnection().prepareStatement(query)) {\n\n                pstmt.setInt(1, roomId);\n                pstmt.setDate(2, checkOut);\n                pstmt.setDate(3, checkIn);\n                pstmt.setDate(4, checkIn);\n                pstmt.setDate(5, checkOut);\n                pstmt.setDate(6, checkIn);\n                pstmt.setDate(7, checkOut);\n\n                try (ResultSet rs = pstmt.executeQuery()) {\n                    if (rs.next()) {\n                        int count = rs.getInt(\"count\");\n                        if (currentReservationId != null && count > 0) {\n                            // \u0418\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438\n                            String excludeQuery = \"SELECT COUNT(*) AS exclude_count FROM Reservations WHERE reservation_id = ? AND \" +\n                                    \"room_id = ? AND status NOT IN ('\u041e\u0442\u043c\u0435\u043d\u0451\u043d', '\u0412\u044b\u0441\u0435\u043b\u0435\u043d') AND (\" +\n                                    \"(check_in <= ? AND check_out > ?) OR \" +\n                                    \"(check_in < ? AND check_out >= ?) OR \" +\n                                    \"(check_in >= ? AND check_out <= ?))\";\n                            try (PreparedStatement pstmtExclude = connection.getConnection().prepareStatement(excludeQuery)) {\n                                pstmtExclude.setInt(1, currentReservationId);\n                                pstmtExclude.setInt(2, roomId);\n                                pstmtExclude.setDate(3, checkOut);\n                                pstmtExclude.setDate(4, checkIn);\n                                pstmtExclude.setDate(5, checkIn);\n                                pstmtExclude.setDate(6, checkOut);\n                                pstmtExclude.setDate(7, checkIn);\n                                pstmtExclude.setDate(8, checkOut);\n\n                                try (ResultSet rsExclude = pstmtExclude.executeQuery()) {\n                                    if (rsExclude.next()) {\n                                        int excludeCount = rsExclude.getInt(\"exclude_count\");\n                                        if (excludeCount > 0) {\n                                            count -= excludeCount;\n                                        }\n                                    }\n                                }\n                            }\n                        }\n                        return count == 0;\n                    }\n                }\n\n            } catch (Exception e) {\n                e.printStackTrace();\n            }\n            return false;\n        }\n\n        private double calculateTotalAmount(int roomId, java.sql.Date checkIn, java.sql.Date checkOut) {\n            String query = \"SELECT price FROM Rooms WHERE room_id = ?\";\n            double price = 0.0;\n            try (ConnectMySQL connection = new ConnectMySQL();\n                 PreparedStatement pstmt = connection.getConnection().prepareStatement(query)) {\n\n                pstmt.setInt(1, roomId);\n                try (ResultSet rs = pstmt.executeQuery()) {\n                    if (rs.next()) {\n                        price = rs.getDouble(\"price\");\n                    }\n                }\n\n                long diffInMillies = checkOut.getTime() - checkIn.getTime();\n                long days = diffInMillies / (1000 * 60 * 60 * 24);\n                return price * days;\n\n            } catch (Exception e) {\n                e.printStackTrace();\n            }\n            return price;\n        }\n    }\n\n    // \u041f\u0430\u043d\u0435\u043b\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043b\u0430\u0442\u0435\u0436\u0430\u043c\u0438\n    class PaymentsPanel extends JPanel {\n        private JTable table;\n        private DefaultTableModel tableModel;\n        private JButton refreshButton;\n        private JLabel totalRevenueLabel;\n\n        public PaymentsPanel() {\n            setLayout(new BorderLayout());\n\n            // \u041f\u0430\u043d\u0435\u043b\u044c \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043e\u0431\u0449\u0435\u0433\u043e \u0434\u043e\u0445\u043e\u0434\u0430\n            JPanel topPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));\n            totalRevenueLabel = new JLabel(\"\u041e\u0431\u0449\u0438\u0439 \u0434\u043e\u0445\u043e\u0434: 0.00\");\n            topPanel.add(totalRevenueLabel);\n            add(topPanel, BorderLayout.NORTH); // \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u043f\u0430\u043d\u0435\u043b\u0438\n\n            // \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b\n            tableModel = new DefaultTableModel();\n            tableModel.setColumnIdentifiers(new String[] {\"ID \u041f\u043b\u0430\u0442\u0435\u0436\u0430\", \"\u0411\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 ID\", \"\u041a\u043b\u0438\u0435\u043d\u0442\", \"\u041d\u043e\u043c\u0435\u0440\", \"\u0414\u0430\u0442\u0430 \u043e\u043f\u043b\u0430\u0442\u044b\", \"\u0421\u0443\u043c\u043c\u0430\", \"\u041c\u0435\u0442\u043e\u0434 \u043e\u043f\u043b\u0430\u0442\u044b\"});\n            table = new JTable(tableModel);\n            loadPayments();\n\n            add(new JScrollPane(table), BorderLayout.CENTER);\n\n            // \u041a\u043d\u043e\u043f\u043a\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f\n            JPanel buttonPanel = new JPanel();\n            refreshButton = new JButton(\"\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c\");\n            buttonPanel.add(refreshButton);\n            add(buttonPanel, BorderLayout.SOUTH);\n\n            // \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439\n            refreshButton.addActionListener(e -> loadPayments());\n        }\n\n        private void loadPayments() {\n            tableModel.setRowCount(0);\n            String query = \"SELECT p.payment_id, p.reservation_id, c.full_name, r.room_number, \" +\n                    \"p.payment_date, p.amount, p.payment_method \" +\n                    \"FROM Payments p \" +\n                    \"LEFT JOIN Reservations res ON p.reservation_id = res.reservation_id \" +\n                    \"LEFT JOIN Archived_Reservations ar ON p.reservation_id = ar.reservation_id \" +\n                    \"LEFT JOIN Customers c ON (res.customer_id = c.customer_id OR ar.customer_id = c.customer_id) \" +\n                    \"LEFT JOIN Rooms r ON (res.room_id = r.room_id OR ar.room_id = r.room_id)\";\n            try (ConnectMySQL connection = new ConnectMySQL();\n                 PreparedStatement pstmt = connection.getConnection().prepareStatement(query);\n                 ResultSet rs = pstmt.executeQuery()) {\n\n                while (rs.next()) {\n                    tableModel.addRow(new Object[] {\n                            rs.getInt(\"payment_id\"),\n                            rs.getInt(\"reservation_id\"),\n                            rs.getString(\"full_name\"),\n                            rs.getInt(\"room_number\"),\n                            rs.getDate(\"payment_date\"),\n                            rs.getBigDecimal(\"amount\"),\n                            rs.getString(\"payment_method\")\n                    });\n                }\n\n                // \u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u0449\u0435\u0433\u043e \u0434\u043e\u0445\u043e\u0434\u0430\n                calculateTotalRevenue();\n\n            } catch (Exception e) {\n                e.printStackTrace();\n                JOptionPane.showMessageDialog(this, \"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043f\u043b\u0430\u0442\u0435\u0436\u0435\u0439.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n            }\n        }\n\n        private void calculateTotalRevenue() {\n            String query = \"SELECT SUM(amount) AS total_revenue FROM Payments\";\n            try (ConnectMySQL connection = new ConnectMySQL();\n                 PreparedStatement pstmt = connection.getConnection().prepareStatement(query);\n                 ResultSet rs = pstmt.executeQuery()) {\n\n                if (rs.next()) {\n                    double totalRevenue = rs.getDouble(\"total_revenue\");\n                    totalRevenueLabel.setText(\"\u041e\u0431\u0449\u0438\u0439 \u0434\u043e\u0445\u043e\u0434: \" + String.format(\"%.2f\", totalRevenue));\n                }\n\n            } catch (Exception e) {\n                e.printStackTrace();\n                JOptionPane.showMessageDialog(this, \"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0440\u0430\u0441\u0447\u0435\u0442\u0435 \u043e\u0431\u0449\u0435\u0433\u043e \u0434\u043e\u0445\u043e\u0434\u0430.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n            }\n        }\n    }\n\n    // \u041f\u0430\u043d\u0435\u043b\u044c \u0430\u0440\u0445\u0438\u0432\u043e\u0432 \u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0439\n    class ArchivePanel extends JPanel {\n        private JTable table;\n        private DefaultTableModel tableModel;\n        private JButton refreshButton;\n\n        public ArchivePanel() {\n            setLayout(new BorderLayout());\n\n            // \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b\n            tableModel = new DefaultTableModel();\n            tableModel.setColumnIdentifiers(new String[] {\"\u0410\u0440\u0445\u0438\u0432 ID\", \"\u0411\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 ID\", \"\u041a\u043b\u0438\u0435\u043d\u0442\", \"\u041d\u043e\u043c\u0435\u0440\", \"\u0414\u0430\u0442\u0430 \u0437\u0430\u0435\u0437\u0434\u0430\", \"\u0414\u0430\u0442\u0430 \u0432\u044b\u0435\u0437\u0434\u0430\", \"\u0421\u0442\u0430\u0442\u0443\u0441\", \"\u0421\u0443\u043c\u043c\u0430\"});\n            table = new JTable(tableModel);\n            loadArchivedReservations();\n\n            add(new JScrollPane(table), BorderLayout.CENTER);\n\n            // \u041a\u043d\u043e\u043f\u043a\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f\n            JPanel buttonPanel = new JPanel();\n            refreshButton = new JButton(\"\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c\");\n            buttonPanel.add(refreshButton);\n            add(buttonPanel, BorderLayout.SOUTH);\n\n            refreshButton.addActionListener(e -> loadArchivedReservations());\n        }\n\n        private void loadArchivedReservations() {\n            tableModel.setRowCount(0);\n            String query = \"SELECT ar.archive_id, ar.reservation_id, c.full_name, r.room_number, ar.check_in, ar.check_out, ar.status, ar.total_amount \" +\n                    \"FROM Archived_Reservations ar \" +\n                    \"JOIN Customers c ON ar.customer_id = c.customer_id \" +\n                    \"JOIN Rooms r ON ar.room_id = r.room_id\";\n            try (ConnectMySQL connection = new ConnectMySQL();\n                 PreparedStatement pstmt = connection.getConnection().prepareStatement(query);\n                 ResultSet rs = pstmt.executeQuery()) {\n\n                while (rs.next()) {\n                    tableModel.addRow(new Object[] {\n                            rs.getInt(\"archive_id\"),\n                            rs.getInt(\"reservation_id\"),\n                            rs.getString(\"full_name\"),\n                            rs.getInt(\"room_number\"),\n                            rs.getDate(\"check_in\"),\n                            rs.getDate(\"check_out\"),\n                            rs.getString(\"status\"),\n                            rs.getBigDecimal(\"total_amount\")\n                    });\n                }\n\n            } catch (Exception e) {\n                e.printStackTrace();\n                JOptionPane.showMessageDialog(this, \"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0430\u0440\u0445\u0438\u0432\u043d\u044b\u0445 \u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0439.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n            }\n        }\n    }\n\n    // \u041a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u0442\u044b \u0432 JDatePicker\n    class DateLabelFormatter extends JFormattedTextField.AbstractFormatter {\n\n        private String datePattern = \"yyyy-MM-dd\";\n        private SimpleDateFormat dateFormatter = new SimpleDateFormat(datePattern);\n\n        @Override\n        public Object stringToValue(String text) throws ParseException {\n            if (text == null || text.isEmpty()) {\n                return null;\n            }\n            return dateFormatter.parse(text);\n        }\n\n        @Override\n        public String valueToString(Object value) throws ParseException {\n            if (value != null) {\n                if (value instanceof java.util.Date) {\n                    java.util.Date date = (java.util.Date) value;\n                    return dateFormatter.format(date);\n                } else if (value instanceof java.util.Calendar) {\n                    java.util.Calendar cal = (java.util.Calendar) value;\n                    return dateFormatter.format(cal.getTime());\n                }\n            }\n            return \"\";\n        }\n    }\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n// src/h/ConnectMySQL.java\npackage h;\n\nimport java.sql.*;\n\npublic class ConnectMySQL implements AutoCloseable {\n    private static final String URL = \"jdbc:mysql://localhost:1369/hotel?useSSL=false&serverTimezone=UTC\";\n    private static final String USER = \"root\";\n    private static final String PASSWORD = \"1369sukAnigghaD1ck\";\n\n    private Connection connection;\n\n    public ConnectMySQL() throws SQLException {\n        // \u041a\u043b\u0430\u0441\u0441 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 MySQL JDBC \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0435 \u043d\u0443\u0436\u0435\u043d\n        this.connection = DriverManager.getConnection(URL, USER, PASSWORD);\n    }\n\n    public Connection getConnection() {\n        return connection;\n    }\n\n    @Override\n    public void close() throws SQLException {\n        if (connection != null && !connection.isClosed()) {\n            connection.close();\n        }\n    }\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// src/h/Login.java\npackage h;\n\nimport java.awt.*;\nimport javax.swing.*;\nimport java.awt.event.*;\nimport java.sql.*;\nimport java.security.MessageDigest;\nimport java.security.NoSuchAlgorithmException;\n\npublic class Login extends JFrame implements ActionListener {\n\n    private JLabel usernameLabel, passwordLabel;\n    private JTextField usernameField;\n    private JPasswordField passwordField;\n    private JButton loginButton, cancelButton;\n    private JCheckBox showPasswordCheck;\n    private JButton signupLink;\n\n    public Login() {\n        setTitle(\"\u0410\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f\");\n        setBounds(700, 300, 400, 300);\n        setLayout(null);\n\n        // \u041c\u0435\u0442\u043a\u0430 \u0438 \u043f\u043e\u043b\u0435 \u0432\u0432\u043e\u0434\u0430 \u0434\u043b\u044f \u043b\u043e\u0433\u0438\u043d\u0430\n        usernameLabel = new JLabel(\"\u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f:\");\n        usernameLabel.setBounds(50, 50, 120, 30);\n        add(usernameLabel);\n\n        usernameField = new JTextField();\n        usernameField.setBounds(180, 50, 150, 30);\n        add(usernameField);\n\n        // \u041c\u0435\u0442\u043a\u0430 \u0438 \u043f\u043e\u043b\u0435 \u0432\u0432\u043e\u0434\u0430 \u0434\u043b\u044f \u043f\u0430\u0440\u043e\u043b\u044f\n        passwordLabel = new JLabel(\"\u041f\u0430\u0440\u043e\u043b\u044c:\");\n        passwordLabel.setBounds(50, 100, 120, 30);\n        add(passwordLabel);\n\n        passwordField = new JPasswordField();\n        passwordField.setBounds(180, 100, 150, 30);\n        add(passwordField);\n\n        // \u0427\u0435\u043a\u0431\u043e\u043a\u0441 \u0434\u043b\u044f \u043f\u043e\u043a\u0430\u0437\u0430 \u043f\u0430\u0440\u043e\u043b\u044f\n        showPasswordCheck = new JCheckBox(\"\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c\");\n        showPasswordCheck.setBounds(180, 140, 150, 25);\n        showPasswordCheck.setBackground(Color.WHITE);\n        showPasswordCheck.addActionListener(this);\n        add(showPasswordCheck);\n\n        // \u041a\u043d\u043e\u043f\u043a\u0430 \u0432\u0445\u043e\u0434\u0430\n        loginButton = new JButton(\"\u0412\u043e\u0439\u0442\u0438\");\n        loginButton.setBounds(50, 180, 120, 30);\n        loginButton.setForeground(Color.BLACK);\n        loginButton.setBackground(Color.BLACK);\n        loginButton.addActionListener(this);\n        add(loginButton);\n\n        // \u041a\u043d\u043e\u043f\u043a\u0430 \u043e\u0442\u043c\u0435\u043d\u044b\n        cancelButton = new JButton(\"\u0412\u044b\u0445\u043e\u0434\");\n        cancelButton.setBounds(210, 180, 120, 30);\n        cancelButton.setForeground(Color.BLACK);\n        cancelButton.setBackground(Color.BLACK);\n        cancelButton.addActionListener(this);\n        add(cancelButton);\n\n        // \u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044e\n        signupLink = new JButton(\"<HTML><U>\u041d\u0435\u0442 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430? \u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f</U></HTML>\");\n        signupLink.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));\n        signupLink.setBorderPainted(false);\n        signupLink.setForeground(Color.BLUE.darker());\n        signupLink.setBackground(Color.WHITE);\n        signupLink.setFocusPainted(false);\n        signupLink.setBounds(100, 220, 200, 25);\n        signupLink.addActionListener(this);\n        add(signupLink);\n\n        getContentPane().setBackground(Color.WHITE);\n        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);\n        setVisible(true);\n    }\n\n    // \u041c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u0445\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u0440\u043e\u043b\u044f\n    private String hashPassword(String password) {\n        try {\n            MessageDigest md = MessageDigest.getInstance(\"SHA-256\");\n            byte[] hash = md.digest(password.getBytes());\n            StringBuilder sb = new StringBuilder();\n            for (byte b : hash) {\n                sb.append(String.format(\"%02x\", b));\n            }\n            return sb.toString();\n        } catch (NoSuchAlgorithmException e) {\n            e.printStackTrace();\n            return null;\n        }\n    }\n\n    // \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u0439\n    public void actionPerformed(ActionEvent ae) {\n        // \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0447\u0435\u043a\u0431\u043e\u043a\u0441\u0430 \u043f\u043e\u043a\u0430\u0437\u0430 \u043f\u0430\u0440\u043e\u043b\u044f\n        if (ae.getSource() == showPasswordCheck) {\n            if (showPasswordCheck.isSelected()) {\n                passwordField.setEchoChar((char) 0);\n            } else {\n                passwordField.setEchoChar('\u2022');\n            }\n        }\n\n        // \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043a\u043d\u043e\u043f\u043a\u0438 \"\u0412\u043e\u0439\u0442\u0438\"\n        if (ae.getSource() == loginButton) {\n            authenticateUser();\n        }\n\n        // \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043a\u043d\u043e\u043f\u043a\u0438 \"\u041e\u0442\u043c\u0435\u043d\u0430\"\n        if (ae.getSource() == cancelButton) {\n            int confirm = JOptionPane.showConfirmDialog(this, \"\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u044b\u0439\u0442\u0438?\", \"\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435\", JOptionPane.YES_NO_OPTION);\n            if (confirm == JOptionPane.YES_OPTION) {\n                System.exit(0);\n            }\n        }\n\n        // \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044e\n        if (ae.getSource() == signupLink) {\n            new SignUp().setVisible(true);\n            this.dispose();\n        }\n    }\n\n    // \u041c\u0435\u0442\u043e\u0434 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\n    private void authenticateUser() {\n        String username = usernameField.getText().trim();\n        String password = new String(passwordField.getPassword()).trim();\n\n        if (username.isEmpty() || password.isEmpty()) {\n            JOptionPane.showMessageDialog(this, \"\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u043f\u0430\u0440\u043e\u043b\u044c.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n            return;\n        }\n\n        String hashedPassword = hashPassword(password);\n        if (hashedPassword == null) {\n            JOptionPane.showMessageDialog(this, \"\u041e\u0448\u0438\u0431\u043a\u0430 \u0445\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u0440\u043e\u043b\u044f.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n            return;\n        }\n\n        // \u041f\u043e\u043f\u044b\u0442\u043a\u0430 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\n        Pr user = authenticateInRole(\"Administrators\", \"admin_id\", \"login\", \"password\");\n        if (user != null) {\n            JOptionPane.showMessageDialog(this, \"\u0414\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c, \u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440!\");\n            new DashboardAdmin(user.getId()).setVisible(true);\n            this.dispose();\n            return;\n        }\n\n        // \u041f\u043e\u043f\u044b\u0442\u043a\u0430 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0420\u0435\u0441\u0435\u043f\u0448\u0438\u043e\u043d\u0438\u0441\u0442\n        user = authenticateInRole(\"Receptionists\", \"receptionist_id\", \"login\", \"password\");\n        if (user != null) {\n            JOptionPane.showMessageDialog(this, \"\u0414\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c, \u0420\u0435\u0441\u0435\u043f\u0448\u0438\u043e\u043d\u0438\u0441\u0442!\");\n            new DashboardReceptionist(user.getId()).setVisible(true);\n            this.dispose();\n            return;\n        }\n\n        // \u0415\u0441\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\n        JOptionPane.showMessageDialog(this, \"\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0435 \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438\u043b\u0438 \u043f\u0430\u0440\u043e\u043b\u044c.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n        usernameField.setText(\"\");\n        passwordField.setText(\"\");\n    }\n\n    /**\n     * \u041c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0439 \u0440\u043e\u043b\u0438.\n     *\n     * @param tableName      \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b (Administrators \u0438\u043b\u0438 Receptionists)\n     * @param idColumn       \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u0430 ID (admin_id \u0438\u043b\u0438 receptionist_id)\n     * @param loginColumn    \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u0430 \u0441 \u043b\u043e\u0433\u0438\u043d\u043e\u043c\n     * @param passwordColumn \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u0430 \u0441 \u043f\u0430\u0440\u043e\u043b\u0435\u043c\n     * @return \u041e\u0431\u044a\u0435\u043a\u0442 Pr \u0441 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435 \u0438\u043b\u0438 null, \u0435\u0441\u043b\u0438 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\n     */\n    private Pr authenticateInRole(String tableName, String idColumn, String loginColumn, String passwordColumn) {\n        String query = \"SELECT * FROM \" + tableName + \" WHERE \" + loginColumn + \" = ? AND \" + passwordColumn + \" = ?\";\n        try (ConnectMySQL connection = new ConnectMySQL();\n             PreparedStatement pstmt = connection.getConnection().prepareStatement(query)) {\n\n            pstmt.setString(1, usernameField.getText().trim());\n            pstmt.setString(2, hashPassword(new String(passwordField.getPassword()).trim()));\n\n            try (ResultSet rs = pstmt.executeQuery()) {\n                if (rs.next()) {\n                    int id = rs.getInt(idColumn);\n                    String fullName = rs.getString(\"full_name\");\n                    String role = tableName.equals(\"Administrators\") ? \"Administrator\" : \"Receptionist\";\n                    return new Pr(id, fullName, role);\n                }\n            }\n\n        } catch (SQLException e) {\n            e.printStackTrace();\n            JOptionPane.showMessageDialog(this, \"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n        }\n        return null;\n    }\n\n    public static void main(String[] args) {\n        // \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u0438\u0434\u0430 \u0434\u043b\u044f \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u044f\n        try {\n            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());\n        } catch (Exception ignored) {}\n\n        new Login();\n    }\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// src/h/Pr.java\npackage h;\n\npublic class Pr {\n    private int id;\n    private String fullName;\n    private String role;\n\n    public Pr(int id, String fullName, String role) {\n        this.id = id;\n        this.fullName = fullName;\n        this.role = role;\n    }\n\n    public int getId() {\n        return id;\n    }\n\n    public String getFullName() {\n        return fullName;\n    }\n\n    public String getRole() {\n        return role;\n    }\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// src/h/SignUp.java\npackage h;\n\nimport java.awt.*;\nimport java.awt.event.*;\nimport javax.swing.*;\nimport java.sql.*;\nimport java.security.MessageDigest;\nimport java.security.NoSuchAlgorithmException;\n\npublic class SignUp extends JFrame implements ActionListener {\n\n    private JTextField nameField, passportField, addressField, phoneField, emailField, loginField;\n    private JPasswordField passwordField;\n    private JCheckBox showPasswordCheck;\n    private JButton signupButton, cancelButton;\n    private JButton loginLink;\n\n    public SignUp() {\n        setTitle(\"\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430\");\n        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);\n        setSize(500, 500);\n        setLocationRelativeTo(null);\n\n        JPanel panel = new JPanel(new GridBagLayout());\n        panel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));\n        GridBagConstraints gbc = new GridBagConstraints();\n        gbc.fill = GridBagConstraints.HORIZONTAL;\n\n        gbc.insets = new Insets(5,5,5,5);\n\n        // \u041f\u043e\u043b\u043d\u043e\u0435 \u0438\u043c\u044f\n        JLabel nameLabel = new JLabel(\"\u041f\u043e\u043b\u043d\u043e\u0435 \u0438\u043c\u044f:\");\n        gbc.gridx = 0;\n        gbc.gridy = 0;\n        panel.add(nameLabel, gbc);\n\n        nameField = new JTextField(20);\n        gbc.gridx = 1;\n        panel.add(nameField, gbc);\n\n        // \u041d\u043e\u043c\u0435\u0440 \u043f\u0430\u0441\u043f\u043e\u0440\u0442\u0430\n        JLabel passportLabel = new JLabel(\"\u041d\u043e\u043c\u0435\u0440 \u043f\u0430\u0441\u043f\u043e\u0440\u0442\u0430:\");\n        gbc.gridx = 0;\n        gbc.gridy++;\n        panel.add(passportLabel, gbc);\n\n        passportField = new JTextField(20);\n        gbc.gridx = 1;\n        panel.add(passportField, gbc);\n\n        // \u0410\u0434\u0440\u0435\u0441\n        JLabel addressLabel = new JLabel(\"\u0410\u0434\u0440\u0435\u0441:\");\n        gbc.gridx = 0;\n        gbc.gridy++;\n        panel.add(addressLabel, gbc);\n\n        addressField = new JTextField(20);\n        gbc.gridx = 1;\n        panel.add(addressField, gbc);\n\n        // \u0422\u0435\u043b\u0435\u0444\u043e\u043d\n        JLabel phoneLabel = new JLabel(\"\u0422\u0435\u043b\u0435\u0444\u043e\u043d:\");\n        gbc.gridx = 0;\n        gbc.gridy++;\n        panel.add(phoneLabel, gbc);\n\n        phoneField = new JTextField(20);\n        gbc.gridx = 1;\n        panel.add(phoneField, gbc);\n\n        // Email\n        JLabel emailLabel = new JLabel(\"Email:\");\n        gbc.gridx = 0;\n        gbc.gridy++;\n        panel.add(emailLabel, gbc);\n\n        emailField = new JTextField(20);\n        gbc.gridx = 1;\n        panel.add(emailField, gbc);\n\n        // \u041b\u043e\u0433\u0438\u043d\n        JLabel loginLabel = new JLabel(\"\u041b\u043e\u0433\u0438\u043d:\");\n        gbc.gridx = 0;\n        gbc.gridy++;\n        panel.add(loginLabel, gbc);\n\n        loginField = new JTextField(20);\n        gbc.gridx = 1;\n        panel.add(loginField, gbc);\n\n        // \u041f\u0430\u0440\u043e\u043b\u044c\n        JLabel passwordLabel = new JLabel(\"\u041f\u0430\u0440\u043e\u043b\u044c:\");\n        gbc.gridx = 0;\n        gbc.gridy++;\n        panel.add(passwordLabel, gbc);\n\n        passwordField = new JPasswordField(20);\n        gbc.gridx = 1;\n        panel.add(passwordField, gbc);\n\n        // \u0427\u0435\u043a\u0431\u043e\u043a\u0441 \u0434\u043b\u044f \u043f\u043e\u043a\u0430\u0437\u0430 \u043f\u0430\u0440\u043e\u043b\u044f\n        showPasswordCheck = new JCheckBox(\"\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c\");\n        gbc.gridx = 1;\n        gbc.gridy++;\n        panel.add(showPasswordCheck, gbc);\n        showPasswordCheck.addActionListener(this);\n\n        // \u041a\u043d\u043e\u043f\u043a\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0438 \u043e\u0442\u043c\u0435\u043d\u044b\n        signupButton = new JButton(\"\u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f\");\n        gbc.gridx = 0;\n        gbc.gridy++;\n        gbc.gridwidth = 2;\n        gbc.insets = new Insets(20,5,5,5);\n        panel.add(signupButton, gbc);\n        signupButton.addActionListener(this);\n\n        cancelButton = new JButton(\"\u041e\u0442\u043c\u0435\u043d\u0430\");\n        gbc.gridy++;\n        panel.add(cancelButton, gbc);\n        cancelButton.addActionListener(this);\n\n        // \u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u043a\u043d\u043e \u0432\u0445\u043e\u0434\u0430\n        loginLink = new JButton(\"<HTML><U>\u0423\u0436\u0435 \u0435\u0441\u0442\u044c \u0430\u043a\u043a\u0430\u0443\u043d\u0442? \u0412\u043e\u0439\u0442\u0438</U></HTML>\");\n        loginLink.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));\n        loginLink.setBorderPainted(false);\n        loginLink.setForeground(Color.BLUE.darker());\n        loginLink.setBackground(Color.WHITE);\n        loginLink.setFocusPainted(false);\n        loginLink.addActionListener(this);\n        gbc.gridy++;\n        panel.add(loginLink, gbc);\n\n        add(panel);\n        setVisible(true);\n    }\n\n    // \u041c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u0445\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u0440\u043e\u043b\u044f\n    private String hashPassword(String password) {\n        try {\n            MessageDigest md = MessageDigest.getInstance(\"SHA-256\");\n            byte[] hashBytes = md.digest(password.getBytes());\n\n            StringBuilder sb = new StringBuilder();\n            for(byte b : hashBytes){\n                sb.append(String.format(\"%02x\", b));\n            }\n\n            return sb.toString();\n        } catch (NoSuchAlgorithmException e) {\n            e.printStackTrace();\n            return null;\n        }\n    }\n\n    // \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u0439\n    @Override\n    public void actionPerformed(ActionEvent ae) {\n        Object source = ae.getSource();\n\n        if (source == showPasswordCheck) {\n            if (showPasswordCheck.isSelected()) {\n                passwordField.setEchoChar((char)0);\n            } else {\n                passwordField.setEchoChar('\u2022');\n            }\n        }\n\n        if (source == signupButton) {\n            String fullName = nameField.getText().trim();\n            String passportNumber = passportField.getText().trim();\n            String address = addressField.getText().trim();\n            String phone = phoneField.getText().trim();\n            String email = emailField.getText().trim();\n            String login = loginField.getText().trim();\n            String password = new String(passwordField.getPassword()).trim();\n\n            // \u0412\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f\n            if (fullName.isEmpty() || passportNumber.isEmpty() || address.isEmpty() ||\n                    phone.isEmpty() || email.isEmpty() || login.isEmpty() || password.isEmpty()) {\n                JOptionPane.showMessageDialog(this, \"\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u0432\u0441\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043b\u044f.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n                return;\n            }\n\n            try {\n                ConnectMySQL connection = new ConnectMySQL();\n                Connection conn = connection.getConnection();\n\n                String query = \"INSERT INTO Administrators (full_name, passport_number, address, phone_number, email, login, password, created_at, updated_at) \"\n                        + \"VALUES (?, ?, ?, ?, ?, ?, ?, NOW(), NOW())\";\n\n                PreparedStatement pstmt = conn.prepareStatement(query);\n                pstmt.setString(1, fullName);\n                pstmt.setString(2, passportNumber);\n                pstmt.setString(3, address);\n                pstmt.setString(4, phone);\n                pstmt.setString(5, email);\n                pstmt.setString(6, login);\n                pstmt.setString(7, hashPassword(password));\n\n                int rowsAffected = pstmt.executeUpdate();\n                if (rowsAffected > 0) {\n                    JOptionPane.showMessageDialog(this, \"\u0410\u043a\u043a\u0430\u0443\u043d\u0442 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043d!\");\n                    new Login().setVisible(true);\n                    this.dispose();\n                } else {\n                    JOptionPane.showMessageDialog(this, \"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0441\u043d\u043e\u0432\u0430.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n                }\n\n                conn.close();\n\n            } catch (SQLIntegrityConstraintViolationException e) {\n                JOptionPane.showMessageDialog(this, \"\u0422\u0430\u043a\u043e\u0439 \u043b\u043e\u0433\u0438\u043d, \u043d\u043e\u043c\u0435\u0440 \u043f\u0430\u0441\u043f\u043e\u0440\u0442\u0430, \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u0438\u043b\u0438 email \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442!\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n            } catch (Exception e) {\n                e.printStackTrace();\n                JOptionPane.showMessageDialog(this, \"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445.\", \"\u041e\u0448\u0438\u0431\u043a\u0430\", JOptionPane.ERROR_MESSAGE);\n            }\n        }\n\n        if (source == cancelButton) {\n            int confirm = JOptionPane.showConfirmDialog(this, \"\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044e?\", \"\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435\", JOptionPane.YES_NO_OPTION);\n            if (confirm == JOptionPane.YES_OPTION) {\n                new Login().setVisible(true);\n                this.dispose();\n            }\n        }\n\n        if (source == loginLink) {\n            new Login().setVisible(true);\n            this.dispose();\n        }\n    }\n\n    public static void main(String[] args) {\n        // \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u0438\u0434\u0430 \u0434\u043b\u044f \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u044f\n        try {\n            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());\n        } catch (Exception ignored) {}\n\n        new SignUp();\n    }\n}\n\n\n\n\n\n\n\n\u0443 \u043c\u0435\u043d\u044f \u0438\u0434\u0435\u044f \u0447\u0442\u043e \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0432\u044b\u0441\u0435\u043b\u0438\u0442 \u0440\u0435\u0441\u0435\u043f\u0448\u0438\u043e\u043d\u0438\u0441\u0442 \u0438\u043b\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u044b\u0441\u0435\u043b\u0438\u0442\u0441\u044f \u0442\u043e \u0435\u0433\u043e \u0437\u0430\u043f\u0438\u0441\u044c \u0443\u0434\u0430\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0437 \u0432\u043a\u043b\u0430\u0434\u043a\u0438 \u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0439 \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u0432\u043e \u0432\u043a\u043b\u0430\u0434\u043a\u0443 \u0430\u0440\u0445\u0438\u0432\u043e\u0432 \u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e\u0431 \u043e\u043f\u043b\u0430\u0442\u0435 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0434\u043e\u043b\u0436\u043d\u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432\u043e \u0432\u043a\u043b\u0430\u0434\u043a\u0435 \u043f\u043b\u0430\u0442\u0435\u0436\u0435\u0439 \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u044f\u0445 \u0438 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 \u0438 \u0440\u0435\u0441\u0435\u043f\u0448\u0438\u043e\u043d\u0438\u0441\u0442\u0430"},{"assistant_initiates":false,"asst_text":"\u4f60\u80fd\u627e\u5230\u57df\u540d \"empresa.cn\" \u7684\u6240\u6709\u8005\u7684\u8054\u7cfb\u5730\u5740\u5417\uff1f","behavior":"degenerate_repetition","conversation_hash":"8883b29c7eac7d27c9001929942b4fcb","conversation_redacted":false,"conversation_toxic":false,"country":"Japan","empty_output":false,"evidence_codes":[],"label":"absent","label_present":false,"label_qualified":false,"label_source":"Final dense release","language":"English","model":"gpt-4o-2024-08-06","n_chars":275,"n_turns_in_conversation":1,"n_words":33,"source_row_offset":5441,"source_shard":"turns-00053.parquet","timestamp":"Mon, 18 Nov 2024 18:11:12 GMT","turn_id":"65537d1f7416c3ff5a373ac9","turn_index":0,"user_text":"Translate the text to China :\n\u00bfPuedes encontrar la direcci\u00f3n de contacto del propietario del dominio \"empresa.cn\"?.\n\n                    Please only output the translation result. Do not output anything else.\n\n                    You response:"},{"assistant_initiates":false,"asst_text":"\u0410\u043d\u0430\u043b\u0438\u0437 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0410.\u0421. \u041f\u0443\u0448\u043a\u0438\u043d\u0430 \"\u0420\u0430\u0437\u043b\u0443\u043a\u0430\"\n\n1) **\u0416\u0438\u0437\u043d\u0435\u043d\u043d\u044b\u0439 \u043f\u0435\u0440\u0438\u043e\u0434 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f**: \n\n\u0421\u0442\u0438\u0445\u043e\u0442\u0432\u043e\u0440\u0435\u043d\u0438\u0435 \"\u0420\u0430\u0437\u043b\u0443\u043a\u0430\" \u0431\u044b\u043b\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0432 1828 \u0433\u043e\u0434\u0443. \u042d\u0442\u043e\u0442 \u043f\u0435\u0440\u0438\u043e\u0434 \u0431\u044b\u043b \u0441\u043b\u043e\u0436\u043d\u044b\u043c \u044d\u0442\u0430\u043f\u043e\u043c \u0432 \u0436\u0438\u0437\u043d\u0438 \u041f\u0443\u0448\u043a\u0438\u043d\u0430. \u0412 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043e\u043d \u043d\u0430\u0445\u043e\u0434\u0438\u043b\u0441\u044f \u043f\u043e\u0434 \u043d\u0430\u0434\u0437\u043e\u0440\u043e\u043c \u043f\u043e\u043b\u0438\u0446\u0438\u0438, \u0435\u0433\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u0432\u0435\u0440\u0433\u0430\u043b\u0438\u0441\u044c \u0446\u0435\u043d\u0437\u0443\u0440\u0435, \u0430 \u043b\u0438\u0447\u043d\u0430\u044f \u0436\u0438\u0437\u043d\u044c \u043d\u0435 \u0431\u044b\u043b\u0430 \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u0430. \u042d\u0442\u0438 \u0444\u0430\u043a\u0442\u043e\u0440\u044b \u043d\u0430\u043b\u043e\u0436\u0438\u043b\u0438 \u043e\u0442\u043f\u0435\u0447\u0430\u0442\u043e\u043a \u043d\u0430 \u0435\u0433\u043e \u0442\u0432\u043e\u0440\u0447\u0435\u0441\u0442\u0432\u043e: \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0435\u0440\u0438\u043e\u0434\u0430 \u0447\u0430\u0441\u0442\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u0433\u043b\u0443\u0431\u043e\u043a\u043e\u0439 \u044d\u043c\u043e\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u0441\u043e\u0441\u0440\u0435\u0434\u043e\u0442\u043e\u0447\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e \u043d\u0430 \u043b\u0438\u0447\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f\u0445.\n\n2) **\u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u0433\u0435\u0440\u043e\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0438 \u043a\u043e\u043c\u0443 \u043e\u043d\u043e \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u043e**:\n\n\u041a\u0430\u043a \u0438 \u0432\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u043b\u0438\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0442\u0438\u0445\u043e\u0442\u0432\u043e\u0440\u0435\u043d\u0438\u044f\u0445 \u041f\u0443\u0448\u043a\u0438\u043d\u0430, \u0433\u043b\u0430\u0432\u043d\u044b\u043c \u0433\u0435\u0440\u043e\u0435\u043c \"\u0420\u0430\u0437\u043b\u0443\u043a\u0438\" \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0430\u043c \u0430\u0432\u0442\u043e\u0440, \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u044e\u0449\u0438\u0439 \u0432 \u0440\u043e\u043b\u0438 \u043b\u0438\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0433\u0435\u0440\u043e\u044f. \u0421\u0442\u0438\u0445\u043e\u0442\u0432\u043e\u0440\u0435\u043d\u0438\u0435 \u043d\u043e\u0441\u0438\u0442 \u0433\u043b\u0443\u0431\u043e\u043a\u043e \u043b\u0438\u0447\u043d\u044b\u0439 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440, \u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043e\u043d\u043e \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u043e \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0432\u043e\u0437\u043b\u044e\u0431\u043b\u0435\u043d\u043d\u044b\u0445 \u041f\u0443\u0448\u043a\u0438\u043d\u0430. \u0425\u043e\u0442\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0435 \u043b\u0438\u0446\u043e \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043e, \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0442, \u0447\u0442\u043e \u044d\u0442\u043e \u043c\u043e\u0433\u043b\u0430 \u0431\u044b\u0442\u044c \u0410\u043d\u043d\u0430 \u041f\u0435\u0442\u0440\u043e\u0432\u043d\u0430 \u041a\u0435\u0440\u043d \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u0430\u044f \u0436\u0435\u043d\u0449\u0438\u043d\u0430, \u0432\u044b\u0437\u044b\u0432\u0430\u0432\u0448\u0430\u044f \u0443 \u041f\u0443\u0448\u043a\u0438\u043d\u0430 \u0441\u0438\u043b\u044c\u043d\u044b\u0435 \u0447\u0443\u0432\u0441\u0442\u0432\u0430.\n\n3) **\u0422\u0435\u043c\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f**:\n\n\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0442\u0435\u043c\u0430 \u0441\u0442\u0438\u0445\u043e\u0442\u0432\u043e\u0440\u0435\u043d\u0438\u044f \u2014 \u0440\u0430\u0437\u043b\u0443\u043a\u0430 \u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u043d\u0435\u0439 \u0447\u0443\u0432\u0441\u0442\u0432\u0430 \u0442\u043e\u0441\u043a\u0438, \u043f\u0435\u0447\u0430\u043b\u0438 \u0438 \u043b\u044e\u0431\u0432\u0438. \u041f\u0443\u0448\u043a\u0438\u043d \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0431\u043e\u043b\u0435\u0437\u043d\u0435\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f, \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0449\u0438\u0435 \u0438\u0437-\u0437\u0430 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0431\u044b\u0442\u044c \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043b\u044e\u0431\u0438\u043c\u044b\u043c \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u043e\u043c. \u0421\u0442\u0438\u0445\u043e\u0442\u0432\u043e\u0440\u0435\u043d\u0438\u0435 \u043e\u0442\u0440\u0430\u0436\u0430\u0435\u0442 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044e\u044e \u0431\u043e\u0440\u044c\u0431\u0443 \u043c\u0435\u0436\u0434\u0443 \u043d\u0435\u0436\u043d\u043e\u0439 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u043d\u0435\u0438\u0437\u0431\u0435\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0440\u0430\u0441\u0441\u0442\u0430\u0432\u0430\u043d\u0438\u044f.\n\n4) **\u041f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u0441\u0442\u0438\u0445\u043e\u0442\u0432\u043e\u0440\u0435\u043d\u0438\u044f**:\n\n\u0421\u0442\u0438\u0445\u043e\u0442\u0432\u043e\u0440\u0435\u043d\u0438\u0435 \u0438\u043c\u0435\u0435\u0442 \u0447\u0435\u0442\u043a\u0443\u044e \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0439\u043d\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u043d\u0443\u044e \u0434\u043b\u044f \u043b\u0438\u0440\u0438\u043a\u0438 \u041f\u0443\u0448\u043a\u0438\u043d\u0430. \u041e\u043d\u043e \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0441\u0442\u0440\u043e\u0444, \u043a\u0430\u0436\u0434\u0430\u044f \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0435\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u0442\u0435\u043c\u0443. \u041e\u0431\u044b\u0447\u043d\u043e \u0441\u0442\u0438\u0445\u043e\u0442\u0432\u043e\u0440\u0435\u043d\u0438\u0435 \u0442\u0430\u043a\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u043d\u0430 \u043a\u043e\u043d\u0442\u0440\u0430\u0441\u0442\u0435 \u043c\u0435\u0436\u0434\u0443 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u044d\u043c\u043e\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u043c\u0438, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0430\u0432\u0442\u043e\u0440\u0443 \u0433\u043b\u0443\u0431\u0436\u0435 \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u044c \u043f\u0435\u0440\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u043b\u0438\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0433\u0435\u0440\u043e\u044f.\n\n5) **\u0421\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438**:\n\n\u041f\u0443\u0448\u043a\u0438\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0434\u0447\u0435\u0440\u043a\u043d\u0443\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0433\u0435\u0440\u043e\u044f.\n\n- **\u042d\u043f\u0438\u0442\u0435\u0442\u044b**: \u041f\u0443\u0448\u043a\u0438\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u044d\u043f\u0438\u0442\u0435\u0442\u043e\u0432 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0442\u043e\u043d\u043a\u0438\u0445 \u0447\u0443\u0432\u0441\u0442\u0432. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \"\u0433\u043e\u0440\u044c\u043a\u0430\u044f \u0440\u0430\u0437\u043b\u0443\u043a\u0430\" \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0432\u0441\u044e \u0442\u044f\u0436\u0435\u0441\u0442\u044c \u0438 \u0433\u043e\u0440\u0435\u0447\u044c \u0440\u0430\u0441\u0441\u0442\u0430\u0432\u0430\u043d\u0438\u044f.\n  \n- **\u041c\u0435\u0442\u0430\u0444\u043e\u0440\u044b**: \u0427\u0435\u0440\u0435\u0437 \u043c\u0435\u0442\u0430\u0444\u043e\u0440\u044b \u0430\u0432\u0442\u043e\u0440 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u044d\u043c\u043e\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f. \u041e\u043d\u0438 \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0442 \u0433\u043b\u0443\u0431\u0436\u0435 \u043e\u0449\u0443\u0442\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0433\u0435\u0440\u043e\u044f \u0438 \u0438\u0445 \u043c\u043d\u043e\u0433\u043e\u0441\u043b\u043e\u0439\u043d\u043e\u0441\u0442\u044c.\n\n- **\u041f\u043e\u0432\u0442\u043e\u0440\u044b**: \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u043e\u0432 \u0443\u0441\u0438\u043b\u0438\u0432\u0430\u0435\u0442 \u044d\u043c\u043e\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u0443\u044e \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0441\u0442\u0438\u0445\u0430, \u0430\u043a\u0446\u0435\u043d\u0442\u0438\u0440\u0443\u044f \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0437\u043d\u0430\u0447\u0438\u043c\u044b\u0445 \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u0445.\n\n- **\u0420\u0438\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b**: \u041e\u043d\u0438 \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0442 \u0433\u043b\u0443\u0431\u0436\u0435 \u043f\u043e\u0433\u0440\u0443\u0437\u0438\u0442\u044c\u0441\u044f \u0432\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u043c\u0438\u0440 \u0433\u0435\u0440\u043e\u044f, \u043e\u0442\u0440\u0430\u0436\u0430\u044f \u0435\u0433\u043e \u0441\u043e\u043c\u043d\u0435\u043d\u0438\u044f \u0438 \u043f\u0435\u0440\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f.\n\n\u042d\u0442\u0438 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0434\u0435\u043b\u0430\u044e\u0442 \u0441\u0442\u0438\u0445\u043e\u0442\u0432\u043e\u0440\u0435\u043d\u0438\u0435 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0433\u043b\u0443\u0431\u043e\u043a\u043e \u044d\u043c\u043e\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c, \u043d\u043e \u0438 \u044d\u0441\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u043d\u044b\u043c, \u0441\u043f\u043e\u0441\u043e\u0431\u0441\u0442\u0432\u0443\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043b\u043d\u043e\u043c\u0443 \u0432\u043e\u0441\u043f\u0440\u0438\u044f\u0442\u0438\u044e \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u043c \u0437\u0430\u043c\u044b\u0441\u043b\u0430 \u0430\u0432\u0442\u043e\u0440\u0430.","behavior":"degenerate_repetition","conversation_hash":"54f754c2c916c60e24e9456f226cdf0d","conversation_redacted":false,"conversation_toxic":false,"country":"Russia","empty_output":false,"evidence_codes":[],"label":"absent","label_present":false,"label_qualified":false,"label_source":"Final dense release","language":"Russian","model":"gpt-4o-2024-08-06","n_chars":2827,"n_turns_in_conversation":1,"n_words":351,"source_row_offset":5442,"source_shard":"turns-00053.parquet","timestamp":"Mon, 18 Nov 2024 18:11:17 GMT","turn_id":"3963e559694619b340753185","turn_index":0,"user_text":"\u041d\u0430\u043f\u0438\u0448\u0438 \u0430\u043d\u0430\u043b\u0438\u0437 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0410. \u0421. \u041f\u0443\u0448\u043a\u0438\u043d\u0430 \"\u0420\u0430\u0437\u043b\u0443\u043a\u0430\" \u041f\u043e \u043f\u043b\u0430\u043d\u0443\n\n1) \u0432 \u043a\u0430\u043a\u043e\u0439 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u044b\u0439 \u043f\u0435\u0440\u0438\u043e\u0434 \u041f\u0443\u0448\u043a\u0438\u043d\u0430 \u0431\u044b\u043b\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435\n\n2) \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0433\u0435\u0440\u043e\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0438 \u043a\u043e\u043c\u0443 \u043e\u043d\u043e \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u043e\n\n3) \u0442\u0435\u043c\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f\n\n4) \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u0441\u0442\u0438\u0445\u043e\u0442\u0432\u043e\u0440\u0435\u043d\u0438\u044f\n\n5. \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u0435\u043b\u043d\u044c\u043e\u0441\u0442\u0438 \u0441 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438 \u0438 \u0438\u0445 \u0440\u043e\u043b\u044c \u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0438\n\n\n\n\n\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0447\u0435\u0440\u043d\u043e\u0432\u0438\u043a\u0438\n\n\n"},{"assistant_initiates":false,"asst_text":"\u4f60\u80fd\u7ed9\u6211\u63d0\u4f9b\u201cproyecto.cn\u201d\u7684\u8be6\u7ec6\u4fe1\u606f\u53ca\u5176\u8fc7\u671f\u65e5\u671f\u5417\uff1f","behavior":"degenerate_repetition","conversation_hash":"6c4b50ffb5f8a370e1c3a31c185993a1","conversation_redacted":false,"conversation_toxic":false,"country":"United States","empty_output":false,"evidence_codes":[],"label":"absent","label_present":false,"label_qualified":false,"label_source":"Final dense release","language":"English","model":"gpt-4o-2024-08-06","n_chars":262,"n_turns_in_conversation":1,"n_words":32,"source_row_offset":5443,"source_shard":"turns-00053.parquet","timestamp":"Mon, 18 Nov 2024 18:11:19 GMT","turn_id":"56415115294415865d678b0a","turn_index":0,"user_text":"Translate the text to China :\n\u00bfMe puedes dar los detalles de \"proyecto.cn\" y su fecha de expiraci\u00f3n?.\n\n                    Please only output the translation result. Do not output anything else.\n\n                    You response:"},{"assistant_initiates":false,"asst_text":"While I don't possess personal experiences, I can provide a comprehensive overview of the Frappe framework and ERPNext based on extensive knowledge up to October 2023.\n\n### **Frappe Framework**\n\n**Overview:**\nFrappe is a full-stack, web-based framework built with Python and JavaScript. It's designed to simplify the development of complex, database-driven applications by providing a robust foundation that handles much of the boilerplate code required for such projects.\n\n**Key Features:**\n\n1. **Model-View-Controller (MVC) Architecture:**\n   - Promotes organized and scalable code structure.\n   \n2. **Meta-driven Architecture:**\n   - Utilizes Meta Data to define application components like forms, reports, and workflows, allowing for dynamic adjustments without altering the underlying code.\n   \n3. **Built-in REST API:**\n   - Facilitates easy integration with other applications and services.\n   \n4. **Role-based Permissions:**\n   - Ensures secure access control, allowing fine-grained permissions management.\n   \n5. **Real-time Updates:**\n   - Supports real-time data synchronization using WebSockets, enhancing user experience.\n   \n6. **Extensibility:**\n   - Modular design allows developers to add or modify features without impacting the core system.\n\n**Use Cases:**\n- Custom ERP systems\n- Content Management Systems (CMS)\n- Customer Relationship Management (CRM) tools\n- E-commerce platforms\n\n### **ERPNext**\n\n**Overview:**\nERPNext is an open-source Enterprise Resource Planning (ERP) software built on the Frappe framework. It's designed to help businesses manage various operations, including accounting, inventory, sales, purchasing, human resources, and more, from a unified platform.\n\n**Key Modules:**\n\n1. **Accounting:**\n   - Manages financial transactions, invoicing, budgeting, and reporting.\n   \n2. **Inventory Management:**\n   - Tracks stock levels, manages warehouses, and handles logistics.\n   \n3. **Sales and CRM:**\n   - Manages leads, opportunities, sales orders, and customer relationships.\n   \n4. **Purchasing:**\n   - Handles supplier management, purchase orders, and procurement processes.\n   \n5. **Human Resources:**\n   - Manages employee records, payroll, attendance, and performance evaluations.\n   \n6. **Manufacturing:**\n   - Oversees production planning, work orders, bill of materials, and quality control.\n   \n7. **Project Management:**\n   - Facilitates task tracking, project timelines, and collaboration among team members.\n\n**Key Features:**\n\n1. **User-Friendly Interface:**\n   - Intuitive design ensures ease of use for non-technical users.\n   \n2. **Customizability:**\n   - Users can tailor modules and forms to fit specific business needs without deep technical knowledge.\n   \n3. **Integration Capabilities:**\n   - Seamlessly integrates with third-party applications and services via APIs.\n   \n4. **Reporting and Analytics:**\n   - Provides powerful tools for generating insights and making data-driven decisions.\n   \n5. **Community and Support:**\n   - Active open-source community contributes to continuous improvements, and extensive documentation is available for users and developers.\n\n**Use Cases:**\n- Small to medium-sized enterprises (SMEs) seeking comprehensive business management solutions.\n- Organizations looking to customize their ERP without incurring high licensing costs.\n- Businesses aiming to integrate various departments into a single cohesive system.\n\n### **Working with Frappe and ERPNext**\n\nDevelopers leveraging the Frappe framework to customize or extend ERPNext benefit from:\n\n1. **Rapid Development:**\n   - The framework's meta-driven approach reduces development time by minimizing repetitive tasks.\n   \n2. **Scalability:**\n   - Both Frappe and ERPNext are designed to scale with business growth, handling increased data and user loads efficiently.\n   \n3. **Community Support:**\n   - A vibrant community provides plugins, extensions, and support, fostering collaborative problem-solving and innovation.\n   \n4. **Continuous Updates:**\n   - Regular updates ensure that the software stays current with technological advancements and evolving business requirements.\n\n### **Conclusion**\n\nThe combination of the Frappe framework and ERPNext offers a powerful, flexible, and cost-effective solution for businesses seeking to streamline their operations. Their open-source nature promotes customization and community-driven enhancements, making them suitable for a wide range of industries and business sizes.","behavior":"degenerate_repetition","conversation_hash":"e137d71c2ff0a5df42de00816d172426","conversation_redacted":false,"conversation_toxic":false,"country":"Yemen","empty_output":false,"evidence_codes":[],"label":"absent","label_present":false,"label_qualified":false,"label_source":"Final dense release","language":"English","model":"o1-mini-2024-09-12","n_chars":4565,"n_turns_in_conversation":1,"n_words":574,"source_row_offset":5444,"source_shard":"turns-00053.parquet","timestamp":"Mon, 18 Nov 2024 18:11:28 GMT","turn_id":"45a0250a6a1ea036a3bc1647","turn_index":0,"user_text":"Please provide a brief overview of your experience working with the Frappe framework and ERPNext."},{"assistant_initiates":false,"asst_text":"\u0915\u094d\u092f\u093e \u0906\u092a \u092e\u0947\u0930\u0947 \u0921\u094d\u0930\u093e\u0907\u0935\u093f\u0902\u0917 \u0932\u093e\u0907\u0938\u0947\u0902\u0938 \u0905\u0928\u0941\u0930\u094b\u0927 \u0915\u0947 \u092a\u0930\u093f\u0923\u093e\u092e \u0932\u093e \u0938\u0915\u0924\u0947 \u0939\u0948\u0902? \u092e\u0947\u0930\u0947 \u092a\u093e\u0938 \u0905\u0926\u094d\u0935\u093f\u0924\u0940\u092f \u092a\u0939\u091a\u093e\u0928\u0915\u0930\u094d\u0924\u093e \u0909\u092a\u0932\u092c\u094d\u0927 \u0939\u0948\u0964","behavior":"degenerate_repetition","conversation_hash":"2545fc79f2ac8798873801d8feae37e9","conversation_redacted":false,"conversation_toxic":false,"country":"China","empty_output":false,"evidence_codes":[],"label":"absent","label_present":false,"label_qualified":false,"label_source":"Final dense release","language":"English","model":"gpt-4o-2024-08-06","n_chars":355,"n_turns_in_conversation":1,"n_words":53,"source_row_offset":5445,"source_shard":"turns-00053.parquet","timestamp":"Mon, 18 Nov 2024 18:11:34 GMT","turn_id":"08c8323fedd037152015e4c9","turn_index":0,"user_text":"Translate the text to India :\nCan you fetch the results for my driving license request? I have the unique identifier on hand..\n\n                    Please only output the translation result. Do not output anything else.\n\n                    You response:"}],"shard":{"index":53,"name":"turns-00053.parquet","rows":69386}}
