📄 metadata.rmeta
/home/palash/git/iron_learn/target/debug/incremental/iron_learn-3d6dcfwp7ec9h/s-hfwozk0y9m-16gkwrs-7ncqkieesti0u5dg5bngyagyn/metadata.rmeta
Language: rmeta • Lines: 11437
rust
��#rustc 1.92.0 (ded5c06cf 2025-12-08)���	ⷄ�ۆ��p��-225863f279df55c4��١�	�T�6a��D�
-5080178c80bf7a93��uӰ]����d��!�-06039bcfba61f665��**�٭T��HО�9�-3e2e950d4bac10b5��	�t�#3Ҵη��Ǣ-d25e598578fbf080�rustc_std_workspace_core������Nm��gmY���-327ea4f353b4eb8c���y.:i���gy"1�r-94fdfaf0af91a65d�miniz_oxide�M�^�yTLm�L�d=B-5312b588e5cfab93�adler2��;~�7�ɴ,P?���-1e0b0d62df36c85c�	hashbrown�L�ϫ	2݆y��q-2ed6a8f06fc51a9d�rustc_std_workspace_alloc�a���p��H����6Z�-05b02707a5b2a256�
std_detect�	c�LN����=1�ʶӐ-5978f0713dd5442d�rustc_demangle�X�Fq��UՃ�>7z
��-43b2ff22c18e1125�cfg_if�֦<����ɐ¬�-6a40188dd7d989d2�	addr2line���,2�!xb�"6�!�	-11d54e777384a9e5�gimli��2��I.�ġ�����-35018e994bad7042�object��T �f��Y�
hQec-2dc10b344e05b569�memchr��xZT9�C��I�Mg�-09f2ab7e0d97e07a��~ݤ	����h���-932f22f820d1e5ec�serde�v]��~����K�A�b4-3d90846d087de2c6�serde_derive�o��dWT������e-e6e038aa96cdd5ec�clap��dTi1
���}�<�O<-204bba79a9be1bfe�clap_builder�Ld���j��<��O���-62ea4db5d4ab2482�anstyle��<��>���݆ah�Q"-611a3923e72ac17f�clap_lex��Y�[��hy&$���-05c2e4d52aed2caf�anstream���D�� I�t�_A-8f8b1685be819caf�
anstyle_parse����-`k}wІb�U�-16f697e230e43947�	utf8parse�Ұ�5M��}����%-55a20bf53ef149de�colorchoice���(.4���7�s�S��-de3f67dda32db1ea�is_terminal_polyfill��4�~Ivz7������W-d2b73b6ef9035c76�
anstyle_query�|n#���l:xy��I�-1ad539b71a901a98�strsim�u�J�6� �Ehn�-8095d292a6ea3ca3�clap_derive�Fk@3�T:���* —-92532e1097413da0�colored����;u]m[���҈-23a91c0b456b4a8d�rand�:�g��C�hq�8��b-59582f3ce6014701�	rand_core�w������
<�~c<!-d10a081d67980ee0�	getrandom���T5֪Wd��T�n�|-ca376ebfba62ea13���v�
їG}�/x$YxD-e720413b8edafa0a��	�-����1ؔ=��G��-e6f0229506bd0299�rand_chacha�����_o
l0�l����-b1215e313103b90d�
ppv_lite86�;���{��b�5��(�-d9cfe94350d59e03�zerocopy�r_k���V"�E�WT�g-323d7e7ef672c39a�zerocopy_derive���כS��Y	*�V?��-278fc09030afb1ae�image���#��ǀ���Hq��-3a5860e9b39d84b6�
num_traits� �	�u�$3���`$;|�-b7fa9740e30e85ad�bytemuck�䣸�O;`�<�X^��l-79c938a95fa607f7�ravif�&Y�â�ը��:�qL-ae61c81357953753�imgref�'���"m��j��|c�K-6276481e74629e43�rav1e��4��n��v�U�h�-c2cdf5245f2091d5�simd_helpers�"1�l`B�d���A�:-48029cb33409641a�	itertools���=Z<6��G�Ld7R-f8fabf0fac410047�either��:�{B�n�*Y�cx-d5303fd443e6a93b�bitstream_io�)�=J$l;��*�ր�-c9bece3169ff8e66�	thiserror���ߏ$.��Y&�^-9c74b7716aa04bb8�thiserror_impl�d�����qth�CPԥ-6bdf76f5084b9654�aligned_vec�!������Vݻ:��'-a0a653ff27e77e10�equator����e��"�b*��qE-c4ec15af5ac8b17f�
equator_macro��!�U�N�z������X-17b7545e96ae3300�arrayvec�2��崼��q�-�]{�-6c21595d89b6025f�v_frame�ab=M��nQ8��5a-3292908b9e01b803�maybe_rayon��#�0���l�͏�q-ca32aa8e7701a603�rayon����⬫����ܔ^�-e9a86bef7e7f0816�
rayon_core��@��q�Y�k+2oD�-683451861a2493f2�crossbeam_deque��8�r���G$7�ݠ-39548485313d4b56�crossbeam_epoch�"����"�@�a
K��V�-898edee4616dca8c�crossbeam_utils�ɟ��P�#�}
�Gr�-30ff13b172e89a74�arg_enum_proc_macro�;�ά!q\빻��D� -845575e70765b623�
num_derive��r7���6�JNk-07619a9ca17314b1�	av1_grain��6,�����>^|-dca44e544145b946�anyhow��4O���t��~���-a8e29080dfa88f6a�num_rational�SJX�d�<m릥~��-da780d95411013ec�
num_bigint����K�2���Q�7�G-4e1fbe0b671fad38�num_integer�8ڰ��d�(�J�t4-157c939c416e91d8�nom����MD���n�"�…-11df9319d0470e97���tE
i�6
^�T
Z�:�-8ec77e60015c3b8a�log���Pz��Na�i��M-f1ce6776ce589c15�av_scenechange�a�#P����d��(-eede86bf716ca890�aligned��ׇ����=8�08��X-57c432200ef7aa3e�as_slice�sw�(F��NV[T�n-1069b17130cc449f�stable_deref_trait�`,]��rhBM�
��-c1b563a78da1ff57�y4m�fٯ���U�c+WYi4-894507e38c6e6f85�	profiling�Pb�_x���
�)���-bceb494ff0df8665�profiling_procmacros�e�9���H�A����
�-0d8c0e1df4c15e00�noop_proc_macro�po���Zay,��
�-ce03a6fe81b5df14�rgb��渺|�iuA84Ghp"-c08c87002a9239c2�quick_error��v)�γ�,���#�+-16937569b7bf55f9�avif_serialize��b��l=��Pܭ
i;-a043d3cd1f8ffba9�loop9�HS"͉��Q�U��S�-cf58aa244acff4fb�byteorder_lite��FS����{Ԍڰ|%-b23754f5d3aa0269�gif�$�g5��_xï2-3882322f61f4d93a�weezl�����cu(I^�B��~�-a4353494f8a0a7cf�color_quant��'+p����I1I�caO�-a7170cf0bea17c8e�	zune_core��р���m��a��9(u-ddf93750e5157d82�	zune_jpeg��6o�h_��������K-72d19b25cbbcd46a�exr���Xȍ���{�w��Mg-efe35081287a6b94�smallvec�j#�%g�G^�J���W-4036188a1e309e0f�half�z��f�iT;u��B��-40917e57cfec9bb5�lebe�̈́�l�>��Otݐ�%-09f462e0dae69152�	bit_field���޳�P��[v���-3f37887804c70baf�zune_inflate�!��BO���yh|�-94a975eb7785c702�simd_adler32�̨2���s7S����-4959f318fd01020d��
�Y�^0��$�(`-8ad7235a9edc0a11�png� �x^��sO�]�M��-a0b4edb055e3833a�	crc32fast��U�n)���荕J��r-69ea6609f925bfa8�fdeflate���L1��X�dd1�3-4724e495799331e7�flate2��!�Q%8^oh�I�vsn�-8de41b7372dc31c1�bitflags�{Jf�fs��5QJD��-c10f145ac5d2b8b0�tiff��n����oLo�۾-1b1780b36fdc3451��$u1\<L���?M��]��-3c4400efc9a96049��$�[|���=|�n�Y-757da2fe39e7dcf1�fax���2��Q��U�Un�-3eb808cd747dbba7�
fax_derive��o�R���B�����-8f6a822a280eb3b4�moxcms��E�戜z�W���}|h-fb08579943e3869b�pxfm�~�V�v�����'�`66-fecc3d1a72786ccb�qoi�\ʁ�B�+�����y-c72288a582241bcd�
image_webp��8�g�C����tJ�-e6266960e6d130f7�unicode_segmentation�������b0z�I�-9f2009d72cd5b583�
rand_distr�Ú����-Փ��'1�-735e6cc7ffe1cf39�
serde_json�����>ǚ�<L���-bc26ce8435d374a6�ryu��[H"��/������ڥ-b3a30414d54ef2b7�itoa�к�q�"F3Ml�-de2a093643172f8d�
DeviceCopy�T��<�cuda�4����init_gpu�D$�<�/4�cuda_tensor�\��<��/4���gpu_context�\��<��/4���	GpuTensor�L�	�<��/4����/D��<�
�/4�
��

GpuContext�T��(�/&$&GPU_CONTEXT�\��K�/IGI�examples_tests�TensorReadme�
commons�denormalize_features�
�
D�normalize_features�
�
�2normalize_features_mean_std���2
add_bias_term��U�complex� �
"�$�$�'�'�*�*�
-�-�0�0�

cpu_tensor�3333333333	3
3?�3OpType�AExp�B
BASin�E
EACos�H
HATan�K
KATanh�N
NASigmoid�Q
QALog�T
TALn�W
WAGreaterThanZeroMask�Z
ZAReLU�]
]3`�`_sigmoid�`
element_op�c	c	c	c	c	c	c	c	c	c		`�`_data�`_shape�`_add�`check_shape�`calculate_length�`_new�`_clip�u	`hadamard�w	`_div�y	`_cpu_mul�`_mul�`_s�3~�~�~�3������3������
3������
�	3����
�zeroes��ones��	get_shape��get_data��synchronize�������
�t��matmul����scale��clip�3���MathOutputElem��
MathOutput��sigmoid����ln��sin��cos��tan��tanh��exp��relu��greater_than_zero_mask�
regression��gradient_descent������<��2���linear_regression���������predict_linear�����2��=����2�logistic_regression�����������>����2�predict_logistic�����2�	examples��
build_network�����������	�
�build_neural_net_from_config�����2�contexts����GLOBAL_CONTEXT����init_context��init�������init_runtime��greet��	read_file�������deserialize_data���2�	�deserialize_model���2��<����������	�
���
�������
run_linear�����2�	�run_logistic�����2�	�types����������n_gram�����������	�
���
������������run_n_gram_generator�����2�	�	�	�	�	�	�	�is_pronounceable��	�	�	�	�	�neural_net_runner�����������	�
���
���������run_neural_net�����2�	�	�	�	�	�	�prepare_network_input�����2�define_neural_net�����2�
draw_image��	draw_grid������transformer�����������	�
���
��������	tokenizer���tokenize_graphemes��	�
vocabulary����������
Vocabulary��stoi��itos��
vocab_size��build_vocabulary��	�	�	�	�Dataset��	SplitData��sample_with_temperature��	�run_transformer_generator�����2�train�����2�	�	�	�	�	�generate_sequence�����2�	�	�	�	�	�build_model�����2�	prep_data�nn��builder�����������	�
��NeuralNetBuilder�����2�layers������2�>�����2��
�
add_linear��add_activation��
add_embedding��add_multihead_transformer��add_transformer_with_seq��add_transformer_block�� add_transformer_block_with_heads��build_from_config��	�	�build���?�	�build_from_model��	�loss_functions��������get_loss_function�����2�mse�����2�	mse_prime�����2�bce�����2�	bce_prime�����2�cce�����2�	cce_prime�����2��H����������apply_layer_norm�����2�	�apply_causal_mask�����2�CombinedEmbedding�����2��
�word_weights��pos_weights���K�seq_len��	embed_dim��
last_input��_marker������2��
�load_word_embeddings������2�forward��backward��get_parameters���
�
layer_type��TransformerCache����q��k��v��attn_weights��TransformerBlock�����2��
��W�query��key����output_proj��ff1��ff2��per_token_embed_dim��	num_heads��head_dim��ln_eps��use_causal_mask��cache������2��
�
with_heads��multihead_with_seq��extract_head_slice��map_head_back_to_buffer������2��
��W��V��V��V������ActivationFn����LossFn����activations����������get_activations�����2�	�	��<����2�
relu_prime�����2��;����2�
sigmoid_prime�����2��<����2�
tanh_prime�����2��;����2��;����2�softmax�����2�	�	�	�
softmax_prime�����2���N����������	�Layer�����2��V��V��V��
��W�LinearLayer�����2�weights��input_cache���
��W��U�����2�_initialize_weights��	��
�	from_data������2��
��V��V��V��W�ActivationLayer�����2��W�output_cache���
��U�����2��
�����2��
��V��V�	��W����	�
��
neural_net�����������	�
���
����	NeuralNet�����2��N�parameter_count���	��
�
current_epoch��
current_lr��last_train_loss��
last_val_loss��loss_fn_type��
epoch_vs_loss������2��
�get_current_epoch��set_current_epoch��predict��fit��F��	get_model��write_model_to_disk��	�
save_model��get_epoch_error���C��TrainingConfig���2�epochs��epoch_offset��base_lr��
lr_adjustment��weight_normalization��TrainingHook��'a���f�S���2�callback��interval���U�_type����h��f��h��2��
numeric������Numeric��'de��zero��one������from_u32��from_f64��
SignedNumeric����j��j������j��j���j��j������j��j���j��j������j��j���j��j������j��j���j��j������j��j���j��j������j��j���j��j������j��j���j��j������j��j���j��j������j��j�	��j��j������j��j�
��j��j������j��j���j��j������j��j���j��j������j��j�
��j��j������j��j���j��j������j��j����������
FloatingPoint��round��sqrt��abs���;��;��;��<��<��;�log10��max��min��neg_infinity����q��q��;��;��;��<��<��;��r��q��r���q��q��;��;��;��<��<��;��r��q��rone_hot�����one_hot_encode�����2�one_hot_decode�����3tensor���math����
TensorMath�����;��;��;����;��;��;��;��<��<��<��<�Tensor����print_matrix���9��9��
��:��:��:������
��:��:����:��;�sum��	utils����get_current_lr���2	

Complex��real��	imaginary���	��
�����_serde���	serialize�����y���j�deserialize����__Field��__field0��
�__field1��
�__ignore��
�__FieldVisitor��
���j�Value��	expecting��	visit_u64��__E��	visit_str���{�visit_bytes���{���j��z���	__Visitor���j��	��	���j��{��{�	visit_seq��__A��	visit_map���|�FIELDS�3	CpuTensor����shape��data�3����3	��3
����3�����
AppContext��app_name����	data_path��
learning_rate���g�gpu_enabled��	lr_adjust��hidden_layer_length��monitor_interval��
sleep_time���
�restore��distribution��example_mode��predict_only��resize��temparature��repeat��n_gram_seed��n_gram_size��weights_path�����
NetworkConfig��
loss_function���N������y���y�����y���j��z����z��z�
��z�
��z�
��z�
���j��{��{��{�	�{��{�	�{��{�	�{��	�j�	�z�	���|�	�j�	�	�	�	��	�j�	�{�	�{�	�|�	�|�	�}�	�|��}��	�2�	���	�y�	�	�j�	�2�	�z�	��	�z�	�z�	
�	�z�	
�	__field2��	
�	__field3��	
�	__field4��	
�	__field5��	
�	__field6��	
�	�z�	
�	�z�	
�	�	�j�	�{�	�{�	�{�	�{�	�{�	�{�	�{�	�{�	�	�j�	�z�	��	�|�	�j�	�2�	�	�	�	�	�	�j�	�2�	�{�	�{�	�|�	�|�	�}�	�|�	�}��	�y�	�	�2�	�y�	���	�2�	��Data��	�2�	m��	n��	x��	y��	m_test��	x_test��	y_test��ExampleMode��	Linear��	
�	Logistic��	
�	�d�	
�	XorNeuralNet��	
�	ImageNeuralNet��	
�	NGram��	
�	Transformer��	
���	����	���	���	��	�	��
�
value_variants��
�h�
to_possible_value��
�h��
���
�
command��
'b��
command_for_update��
����
from_arg_matches��
from_arg_matches_mut��
	�
	�
	�
	�
	�
	�
	�
	�
	�
		�
	
�
	�
	�
	
�
	�
	�
	�
	�
update_from_arg_matches��
update_from_arg_matches_mut��
	�
	�
	�
	�
	�
	�
	�
	�
	�
		�
	
�
	�
	�
	
�
	�
	�
	�
	��
group_id��
augment_args��
���
�
augment_args_for_update��
���
�
�
�
�
�
�
�
�
�
�
	�

�
�
�

�
�
�
�
�
�
�
�
�
�
�
�
�
�
	�

�
�
�

�
�
�
�
�
IronLearnArgs��
�
�
cpu��
mode��
��
�	�
�g�
	data_file��
	adjust_lr��
internal_layers��
��
��
��
���
	reproduce��
ƀ�
ـ�
��
���
NGramMetadata��
�K�
�J�
�K�

multiplier���
���
�y�
�
�y�����y���j��z����z��z�
��z�
����
�ȅ�
��z�
��z�
���j��{��{��{��{��{��{��{��{���j��z����|��j��	��	���j��{��{��|��|��}��|��}�LossFunctionType��MeanSquaredError��
�BinaryCrossEntropy��
�CategoricalCrossEntropy��
������y���y�����y���j��z����z��z�
��z�
����
��z�
���j��{��{��{��{��{��{��{��{���j��z����|��j��	��	���j��{��{�
visit_enum���|�VARIANTS�������2�����y���2��y�����y���j��2��z����z��z�
��z�
����
�ȅ�
�݅�
��z�
��z�
���j��{��{��{��{��{��{��{��{���j��z����|��j��2��	��	���j��2��{��{��|��|��}��|��}�	LayerData���2��W��
����`��}���2�����y���2��y�����y���j��2��z����z��z�
��z�
����
�ȅ�
�݅�
���
����
�__field7��
��z�
��z�
���j��{��{��{��{��{��{��{��{���j��z����|��j��2��	��	���j��2��{��{��|��|��}��|��}�	ModelData���2��
��d��N�epoch��saved_lr���e�epoch_error���	�	LayerType���5�
��5�
�ˉ�
��5�
��6�
�Softmax��
�	Embedding��
�Ɗ�
��
���
���
�y�
�
�y�
���
�y�
�
�j�
�z�
��
�z�
�z�
�
�z�
�
���
�
ȅ�
�
݅�
�
��
�
���
�
��
�
�z�
�
�
�j�
�{�
�{�
�{�
�{�
�{�
�{�
�{�
�{�
�
�j�
�z�
��
�|�
�j�
�	�
�	�
�
�j�
�{�
�{�
ޙ�
�|�
���DistributionType��
Xavier��
�
��
�
Uniform��
�
He��
��
���
�
8
8
8
8
8
888#8#8#8c8n8o8p8q8q8r8s8u8w8w8y8y8{8{8|8|8}8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8�
8�
8�
8�
8�
8�
8�
8�
8�
8�
8�
8�
8�
8�
8�
8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�
8�
8�
8�
8�
8�
8�
8�
8�
8�
8�
8�
8�
8�
8�
8�
8�
8�������_���x��x��x9W�g����������������������������j�����z6�l�c���j�����z���z���z���pA�^��j����|��	��	
 5p�BJ��j�j�_���������������������������_���}��}3��}3C�nn�}������������������������������������������_���~��~����~��~��g��~����������
��������������ƀ�ـ��������Q�Q7|x�_�����Á��N��ស@��������j�����z_��&��O�j�����z���z���z��G����j��	�	�|�	�	��	�	����a�U��j�j�_�	�	ֈ�	��	��	���	���	���	���	���������2��	�	ֈ�	��	��	���	���	���	���	���������2�j��	�	�	�z�}6	4��I�j��	�	�	�z�	�	�z�	�	���	�	ȅ�	�	݅�	�	��	�	���	�	�z�ջ���)�j��	�	�|�	�	��	�	�4��-6�j���j��������	�	�	ˉ�	�	މ�	�	�d�	�	���	�	���	�	���	�	Ɗ��03�nq������������������������B���_��#�
�
���
�
�
���
���
��
�	�
�g�
ӑ�
��
���
��
��
��
���
���
ƀ�
ـ�
��
��	4��2��5��:���_�
�
��
�K��
�J��
�K��
����"�w�&��������j�����z��R�_�j�����z���z������ȅ���z��k�i�k�j����|��	���	�떷���j�j����N��N�^PMD�u�������_�������ږ�����vc�m�<�������j�����z���F��]A�j�����z���z�����X:�/�j�j����|��	���	�Ri�Q�U|V�j�j�������T��
���U���U���K���U���U���U���U�7�yޚ��������������W��
���W���X���X������X���X���X���X���Y���Y���Y���Y���Y���/�����������_��ϝ��W��
����`��}@�������������ϝ��W��
����`��}@��������j�����z�Ǚ���D�j�����z���z������ȅ��݅���zZ�������j����|��	���	���8�7i��j���j�_������
��d��N��������e�Ѣ��	$�j���1������������
��d��N��������e�Ѣ��	$�j���1���j�����z(����	��j��	���z���z������ȅ��݅�������������zw6%x�µt�j����|��	���	�V�*f��!��j���j�_����5���5��ˉ���5�
�
�6�
�
���
�
ӣ�
�
Ɗ��r,�0����������j��
�
�
�zma�`�+��j��
�
�
�z�
�
�z�
�
���
�
ȅ�
�
݅�
�
��
�
���
�
�ln�~>��j��
�
�|�
�	��
�	����{�+J�j�j�_�
�
�
���
�
��
�
ݧ�
�
�a��`�h�������`��`���`���
���W���U�G��ȸd+������������a��W���b���
���U��&-�/�������������������������������������������������	�	�
�	�
�
�������
��
�
�����	�	�����	�	���	�	�����	�	�	�	���
��
�
���	�	�����	�	�
�
�������
��������	��	�	�	�	��
���������������
��
�
�������	�	�	�	�	�	�����������������
�
�
�
"�$�~�'���*���-�0��������	�	�	�	�
�	�
�
�
�
�
�
�
�
���������������������������������������_���T����1��8�p�_p���
��
��
���B#25:����	M�/H��#.5_�X��#.5_�X�	�7DQ
���	w������������������_��
������	���������"*�
D+6=0��
G+6=2��
J+6=3��
M+6=4��
P+6=5��
S+6=6��
V+6=7��
Y+6=8��
	\+6=9��

_+6=10�H���$/6_�X���$/6_�X��
�	��&3@����
c�	q��}�������������_��
���
��������	�����
X���	$/6_�X��
�	��7DQ����
t�	�����������������_��
����������������	��
��&5�	E��R��[cH���	$/6_�0��
 �
.9@18usize�0��
 �
.9@18usize�H���
$/6_�X���$/6_�X��
���7DQ����
t������������������_��
���
������
���
���!��.��7?H���$/6_�X���$/6_�X��
���7DQ����
t������������������_��
���������������"��+3H���$/6_�X���$/6_�X��
���7DQ����
t�����������������_��
���
��������������-��:�CKH���$/6_�X���$/6_�X��
���7DQ����
t�����̒�̒�Β�̒��_��
��������������������&��2A�Q̒^ΒgoH���
$/6_�X���
$/6_�X��
�
̒&3@����
c�
q��}̒�̒�Β�̒��_��
������������ ���!���"��#	��$��.�
>̒KΒT\3���������x<����j<����jl����v4����}L����=��
���>��
���[d����a|�����_,�����`\�����[4����dL�����N������2��
��<�����'��*.��# Iron Learn \u{2699}\u{fe0f}\r\n\r\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\r\n![Build Status](https://img.shields.io/github/actions/workflow/status/palash90/iron_learn/rust.yml)\r\n[![codecov](https://codecov.io/gh/Palash90/iron_learn/graph/badge.svg?token=A95Y5Y3PRI)](https://codecov.io/gh/Palash90/iron_learn)\r\n![Docs](https://docs.rs/iron_learn/badge.svg)\r\n![Rust Stable](https://img.shields.io/badge/rust-stable-blue)\r\n![Crates.io](https://img.shields.io/crates/v/iron_learn)\r\n\r\nA minimalistic Rust machine learning library with optional GPU-accelerated optimization. Built for learning tensor operations, gradient-based algorithms, and numerical computing with an emphasis on type safety and correctness.\r\n\r\n## Features\r\n\r\n- **GPU-Accelerated Training**: CUDA kernels for Tensor operations. Need to explicitly enable the feature. More on this later.\r\n- **Comprehensive Tensor Support**: Two-dimensional arrays with generic numeric types\r\n- **Complex Number Arithmetic**: Native support for complex-valued computations\r\n- **Zero-Copy Operations**: Borrowing methods for efficient computation reuse\r\n\r\n## Network Output\r\n\r\nBefore we deep dive into the nitty-gritties of the library, let\'s have a look on few of the examples the neural network presented:\r\n\r\n1. [Image Reconstruction](#image-reconstruction)\r\n\r\n## Quick Start\r\n\r\n### Installation\r\n\r\nAdd to your `Cargo.toml`:\r\n\r\n```toml\r\n[dependencies]\r\niron_learn = \"0.6\"\r\n```\r\n\r\n### Basic Tensor Usage Example\r\n\r\n```rust\r\nuse iron_learn::CpuTensor;\r\nuse iron_learn::Tensor;\r\n\r\n// Create 2x2 matrices\r\nlet a: CpuTensor<f32> = CpuTensor::new(vec![2, 2], vec![1.0, 2.0, 3.0, 4.0]).unwrap();\r\nlet b: CpuTensor<f32> = CpuTensor::new(vec![2, 2], vec![5.0, 6.0, 7.0, 8.0]).unwrap();\r\n\r\nprintln!(\"Original A:\");\r\na.print_matrix();\r\n\r\nprintln!(\"Original B:\");\r\nb.print_matrix();\r\n\r\n// Add tensors without move\r\nlet sum = a.add(&b).unwrap();\r\nprintln!(\"Sum:\");\r\nsum.print_matrix();\r\n\r\n// Subtract tensors without move\r\nlet sum = a.sub(&b).unwrap();\r\nprintln!(\"Difference:\");\r\nsum.print_matrix();\r\n\r\n// Multiply tensors (Element wise multiplication)\r\nlet product = a.mul(&b).unwrap();\r\nprintln!(\"Product:\");\r\nproduct.print_matrix();\r\n\r\n// Multiply tensors  (Matrix multiplication)\r\nlet product = a.matmul(&b).unwrap();\r\nprintln!(\"Dot Product:\");\r\nproduct.print_matrix();\r\n\r\n// Divide tensors (Element wise division)\r\nlet result = a.div(&b).unwrap();\r\nprintln!(\"Division:\");\r\nresult.print_matrix();\r\n\r\n// Transpose\r\nlet t = a.t().unwrap();\r\nprintln!(\"Transpose of A:\");\r\nt.print_matrix();\r\n```\r\n\r\nFor detailed example, check out [Examples](#examples)\r\n\r\n## How to build and run\r\n\r\nPrerequisites:\r\n\r\n- Rust toolchain (stable or nightly depending on local setup): https://rustup.rs\r\n- For GPU builds: CUDA Toolkit and an NVIDIA GPU (driver + nvcc). If you don\'t plan to use GPU tensors, CPU-only build is fine.\r\n- Python 3.8+ for the scripts (optional). `cupy` is needed for running `python_scripts`.\r\n\r\nThe library has two modes - CPU and Cuda. Default is CPU, Cuda comes as an optional feature. If you have CUDA environment setup, you can use `--features=cuda` flag for building and running the code.\r\n\r\nBuild the basic CPU based Rust library and examples:\r\n\r\n```bash\r\ncargo build --release\r\n```\r\n\r\nRun unit tests:\r\n\r\n```bash\r\ncargo test\r\n```\r\n\r\nRun the Rust demonstration runners (examples):\r\n\r\n```bash\r\n# This is to get a comprehensive documentation of all the CLI Flags\r\ncargo run -- -h\r\n```\r\n\r\n```bash\r\n# Run a neural network example\r\ncargo run\r\n```\r\n\r\nIf you want to enable CUDA-backed tensors, ensure your environment has CUDA installed and visible to the linker. Typical workflow is the same `cargo build --features=cuda` but the code will initialize GPU devices at runtime when `init_gpu()` or `init_context()` is invoked.\r\n\r\nPython scripts can be run directly:\r\n\r\n```bash\r\npython python_scripts/k-means.py\r\npython anomaly_detection.py\r\n```\r\n\r\n`python_scripts/check_cuda.py` is a small utility to detect/validate CUDA availability from Python; useful for quick GPU checks.\r\n\r\n## Examples\r\n\r\n### Use GPU Tensor\r\n\r\n```rust\r\n# #[cfg(feature = \"cuda\")]\r\n# {\r\nuse iron_learn::init_gpu;\r\nuse iron_learn::GpuTensor;\r\nuse iron_learn::Tensor;\r\n\r\ninit_gpu();\r\n// Create 2x2 matrices\r\nlet a: GpuTensor<f32> = GpuTensor::new(vec![2, 2], vec![1.0, 2.0, 3.0, 4.0]).unwrap();\r\nlet b: GpuTensor<f32> = GpuTensor::new(vec![2, 2], vec![5.0, 6.0, 7.0, 8.0]).unwrap();\r\n\r\nprintln!(\"Original A:\");\r\na.print_matrix();\r\n\r\nprintln!(\"Original B:\");\r\nb.print_matrix();\r\n\r\n// Add tensors without move\r\nlet sum = a.add(&b).unwrap();\r\nprintln!(\"Sum:\");\r\nsum.print_matrix();\r\n\r\n// Subtract tensors without move\r\nlet sum = a.sub(&b).unwrap();\r\nprintln!(\"Difference:\");\r\nsum.print_matrix();\r\n\r\n// Multiply tensors (Element wise multiplication)\r\nlet product = a.mul(&b).unwrap();\r\nprintln!(\"Product:\");\r\nproduct.print_matrix();\r\n\r\n// Multiply tensors (Matrix multiplication)\r\nlet product = a.matmul(&b).unwrap();\r\nprintln!(\"Dot Product:\");\r\nproduct.print_matrix();\r\n\r\n// Divide tensors (Element wise division)\r\nlet result = a.div(&b).unwrap();\r\nprintln!(\"Division:\");\r\nresult.print_matrix();\r\n\r\n// Transpose\r\nlet t = a.t().unwrap();\r\nprintln!(\"Transpose of A:\");\r\nt.print_matrix();\r\n\r\n# }\r\n```\r\n\r\n### Use Neural Network\r\n\r\n```rust\r\nuse iron_learn::nn::loss_functions::LossFunctionType;\r\nuse iron_learn::nn::types::TrainingConfig;\r\nuse iron_learn::nn::types::TrainingHook;\r\nuse iron_learn::nn::DistributionType;\r\nuse iron_learn::nn::LayerType;\r\nuse iron_learn::CpuTensor;\r\nuse iron_learn::NeuralNet;\r\nuse iron_learn::NeuralNetBuilder;\r\nuse iron_learn::Tensor;\r\n\r\n\r\n    let mut nn = NeuralNetBuilder::<CpuTensor<f32>, f32>::new();\r\n\r\n    let x: CpuTensor<f32> =\r\n        CpuTensor::new(vec![4, 2], vec![0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0]).unwrap();\r\n    let y: CpuTensor<f32> = CpuTensor::new(vec![4, 1], vec![0.0, 1.0, 1.0, 0.0]).unwrap();\r\n\r\n    let monitor =\r\n        |epoch: usize, err: f32, current_lr: f32, nn: &mut NeuralNet<CpuTensor<f32>, f32>| {\r\n            println!(\"Processing epopch: {epoch}, error: {err}\");\r\n        };\r\n\r\n    nn.add_linear(2, 4, \"Input\", &DistributionType::Uniform);\r\n    nn.add_activation(LayerType::Tanh, \"Activation Layer\");\r\n\r\n    nn.add_linear(4, 1, \"Hidden\", &DistributionType::Uniform);\r\n    nn.add_activation(LayerType::Sigmoid, \"Output\");\r\n\r\n    let mut net = nn.build(\r\n        LossFunctionType::MeanSquaredError,\r\n        &\"neural-net\".to_string(),\r\n    );\r\n\r\n    let config = TrainingConfig {\r\n        epochs: 5,\r\n        epoch_offset: 0,\r\n        base_lr: 1.0,\r\n        lr_adjustment: false,\r\n        weight_normalization: false\r\n    };\r\n\r\n    let monitor = |epoch: usize,\r\n                   err: f32,\r\n                   err_val: f32,\r\n                   lr: f32,\r\n                   _nn: &mut NeuralNet<CpuTensor<f32>, f32>| {\r\n        println!(\"Processing epopch: {epoch}, error: {err}\");\r\n    };\r\n\r\n    let hook_config = TrainingHook::new(1, monitor);\r\n\r\n    net.fit(&x, &y, &x, &y, config, hook_config);\r\n\r\n    let prediction = net.predict(&x).unwrap();\r\n    println!(\"\\nPredicted value\");\r\n    prediction.print_matrix();\r\n\r\n\r\n```\r\n\r\n## Image Reconstruction\r\n\r\nIn one of the POCs with a ~99K parameter vanilla neural network, I have tried the Universal Approximation Theorem to reconstruct an image. Following are few snaps from the training of a very complex funtion (an image of Simba).\r\n\r\n### The random noise the network started with\r\n\r\n![Starting Random Noise](model_outputs/image/images/output0.png)\r\n\r\n### Reconstructed image after 200,000 epochs\r\n\r\n![Intermediate Reconstruction](model_outputs/image/images/output250000.png)\r\n\r\n### Reconstructed image after 800,000 epochs\r\n\r\n![Intermediate Reconstruction](model_outputs/image/images/output800000.png)\r\n\r\nFor comparison, Following is the original image fed to the network.\r\n\r\n### Original Image\r\n\r\n![Original Image](model_outputs/image/images/original.png)\r\n\r\n### Reconstructed image at higher pixels (200 x 200 reconstructed at 512 x 512)\r\n\r\n![Reconstructed Higher Resolution Image](model_outputs/image/images/output-512-reconstruction.png)\r\n\r\n### Time lapse of regeneration step by step\r\n\r\n![Time lapse of regeneration](model_outputs/image/images/timeline.gif)\r\n\r\nYou can find all the regenerated images in [model_outputs/image/images](model_outputs/image/images) directory.\r\n\r\n## High-level Overview of the components\r\n\r\n- Rust: Core `Tensor` abstraction implementing `Tensor`s, numeric abstractions, optimization (gradient descent), neural network primitives, and optional CUDA-backed tensor implementations.\r\n- CUDA: `kernels/` contains CUDA kernels used by the Rust `cuda_tensor` and `gpu_context` modules for accelerated matrix ops.\r\n- Python: `python_scripts/` contains helper scripts, experiments and small neural-network examples used for prototyping and data preprocessing.\r\n- Data/Images: Example JSON metadata and image assets under `data/` and `model_outputs/` used by demos and scripts.\r\n\r\n## Architecture\r\n\r\n![Iron Learn System Architecture](iron_learn_arch.png)\r\n_Architecture diagram generated by Gemini (AI by Google)._\r\n\r\n_The diagram above illustrates the relationship between the high-level Rust API, the Core Tensor abstractions, and the dual-backend (CPU/GPU) execution model._\r\n\r\n## Quick Module Reference\r\n\r\n**Tensor API**\r\n\r\n- **Purpose:** Core trait `Tensor<T>` defines creation (`new`, `zeroes`, `ones`), shape/data accessors (`get_shape`, `get_data`), linear algebra (`add`, `sub`, `mul`, `t`, `multiply`, `div`, `scale`, `clip`) and reducers (`sum`). See `src/tensor/mod.rs` for the trait and basic docs.\r\n\r\n_NB:_ The library does not yet support broadcasting. I will soon introduce broadcasting logic.\r\n\r\n**CpuTensor (CPU backend)**\r\n\r\n- **Purpose:** `CpuTensor<T>` implements `Tensor<T>` for CPU operations with plain Rust `Vec<T>` storage and row-major layout. See `src/cpu_tensor/mod.rs`.\r\n- **Highlights:** explicit shape validation, element-wise math helpers, an inner `_cpu_mul` implementation optimized for clarity and basic SIMD-friendly loops, and numerically-stable sigmoid in `element_op`.\r\n- **Limitations:** Currently restricted to 1D/2D tensors.\r\n\r\n**GpuTensor (CUDA backend)**\r\n\r\n- **Purpose:** `GpuTensor<T>` provides a CUDA-backed `Tensor` using device buffers, kernels from `kernels/gpu_kernels.cu`, and optional cublas-accelerated multiplication (`_gpu_mul_cublas`). See `src/cuda_tensor/mod.rs` and `src/gpu_context.rs` for initialization.\r\n- **Highlights:** device memory pooling, kernel launches via `cust::launch!`, functions for elementwise ops (`element_op`), clipping, transpose (naive), tiled matrix multiply, and column-wise reduce. Uses `GPU_CONTEXT` to find module/function handles.\r\n- **Notes:** GPU ops require `init_gpu()` to be called and a valid `GpuContext`. Multiplication defaults to `cublasSgemm` path when available.\r\n- **Limitations:** Currently restricted to 1D/2D single precision floating point tensors. If any other data type is used, the result may not be returned as expected.\r\n\r\n**GPU Context**\r\n\r\n- **Purpose:** `src/gpu_context.rs` exposes `init_gpu(...)` and `GPU_CONTEXT` (global OnceLock). It stores CUDA `Module`, `Stream`, `CudaMemoryPool`, and a `CublasHandle` used by `GpuTensor`.\r\n\r\n**Gradient Descent / Regression**\r\n\r\n- **Purpose:** `src/gradient_descent.rs` implements `gradient_descent`, `linear_regression`, `logistic_regression`, and helpers `predict_linear`, `predict_logistic`. The functions expect `Tensor<f64>` with `TensorMath<f64>` support and follow standard batch gradient updates with optional logistic sigmoid.\r\n\r\n**Neural Network**\r\n\r\n- **Purpose:** High-level NN abstraction in `src/neural_network/`. Use `NeuralNetBuilder` to add `Linear` layers (`LinearLayer`) and activations (`ActivationLayer`) and then `build()` a `NeuralNet` instance.\r\n- **Model Persistence:** `ModelData` (see `src/neural_network/mod.rs`) serializes model metadata:\r\n  - `name`: model name\r\n  - `parameter_count`: total parameters\r\n  - `layers`: list of `LayerData` objects (`layer_type`, `name`, `index`, `weights`, `shape`)\r\n  - `epoch`: last saved epoch, such that you can resume the Neural Network where is left last.\r\n  - `saved_lr`: learning rate saved with the model. Right now two learning rate adjustment is supported - None (no change in learning rate) and cos annealing.\r\n\r\n**CUDA Kernels (quick API map)**\r\n\r\n- Located at `kernels/gpu_kernels.cu`. Main exported kernels (extern \"C\"):\r\n  - `fill_value(float *out, int n, float value)` \u{2014} fill buffer\r\n  - `vector_arithmatic(const float *a, const float *b, float *out, int n, unsigned int op)` \u{2014} add/sub/mul/div\r\n  - `clip(const float *s, float *r, int n, float min, float max)` \u{2014} clip values\r\n  - `element_op(const float *s, float *r, int n, int op, float scale)` \u{2014} exp/sin/cos/tanh/sigmoid/log\r\n  - `compare_memory(const float *a, const float *b, size_t size, int *result)` \u{2014} compare arrays\r\n  - `transpose_naive(const float *A, float *B, int M, int N)` \u{2014} naive transpose\r\n  - `matrix_mul(const float *A, const float *B, float *C, int M, int N, int K)` \u{2014} tiled matmul using shared memory\r\n  - `column_reduce(const float *inputMatrix, float *outputSums, int numRows, int numCols)` \u{2014} column sums\r\n\r\n**Python scripts (where to look)**\r\n\r\n- `python_scripts/neural_net/*` \u{2014} prototype Python-side neural net builder and helpers used for experiments and model JSON creation.\r\n- `anomaly_detection.py` \u{2014} feature-wise Gaussian estimation and F1-based threshold selection (useful as a standalone script).\r\n\r\n**Data & Model JSONs**\r\n\r\n- Example dataset: see `data/image.json` (fields: `m`, `n`, `m_test`, `x`, `y`, `x_test`, `y_test`) \u{2014} JSON contains flattened row-major arrays for `x`/`y`.\r\n- Example model file: see `model_outputs/image/model.json` \u{2014} follows `ModelData` schema described above. Use `read_file::deserialize_model()` to load models into `ModelData`, and `NeuralNetBuilder::build_from_model()` to restore a runtime `NeuralNet` from `ModelData`.\r\n\r\n## Repository Structure\r\n\r\n- `src/` \u{2014} Rust library and binaries\r\n\r\n  - `tensor/` \u{2014} Tensor trait and backend implementations (CPU/GPU implementations live in `cpu_tensor/` and `cuda_tensor/`).\r\n  - `neural_network/` \u{2014} High-level NN builder, layers, activations and loss functions.\r\n  - `gradient_descent.rs` \u{2014} CPU implementations of linear and logistic regression and helper routines (normalization, bias handling).\r\n  - `gpu_context.rs`, `cuda_tensor/` \u{2014} GPU initialization and device-backed tensor types (CUDA interop, cublas wrappers, memory pools).\r\n  - `read_file.rs` \u{2014} Helpers for loading JSON model/data artifacts.\r\n  - `runners.rs` \u{2014} Small CLI-like routines for running `run_linear`, `run_logistic`, and `run_neural_net` examples.\r\n\r\n- `kernels/` \u{2014} CUDA device code\r\n\r\n  - `gpu_kernels.cu` \u{2014} Implementations for tiled matrix multiplication, elementwise ops, clipping, transpose and reductions.\r\n  - `gpu_kernels.ptx` \u{2014} Precompiled PTX shipped alongside the CUDA source.\r\n\r\n- `python_scripts/` \u{2014} Python utilities and experiments\r\n\r\n  - Top-level scripts: `k-means.py`, `check_cuda.py`, `plot_graph.py`, etc.\r\n  - `neural_net/` \u{2014} Small Python builder, activation, layers and helpers used for rapid prototyping and educational examples.\r\n\r\n- `data/`, `model_outputs/image/` \u{2014} Example datasets, model JSONs and saved weights used by demos.\r\n\r\n## What each major component does\r\n\r\n**Rust: `src/`**\r\n\r\n- `tensor` (trait & implementations): Core abstraction exposing operations such as `add`, `mul`, `transpose`, elementwise math (`sin`, `cos`, `sigmoid`, etc.), and shape/data accessors. Backends implement `TensorMath` for mathematical functions.\r\n- `cpu_tensor/`: Pure CPU tensor implementation used for most algorithms and tests. Most of these are Auto-Vectorized for parallel computation support.\r\n- `cuda_tensor/`: CUDA-backed tensor implementation with device buffers and memory pooling. Integrates with `gpu_context` and uses kernels from `kernels/`.\r\n- `neural_network/`: Provides a `NeuralNetBuilder` and a runtime `NeuralNet` type. Layers implement a `Layer<T>` trait; `LinearLayer` handles weight matrices and updates while `ActivationLayer` applies elementwise activations (sigmoid/tanh/linear/sin). `loss_functions.rs` contains `MeanSquaredErrorLoss` and `BinaryCrossEntropy` used for backprop.\r\n- `gradient_descent.rs`: Implements `linear_regression`, `logistic_regression`, plus helper functions `predict_linear`, `predict_logistic`, and `gradient_descent` steps. Also contains `normalize_features` exposed from `commons`.\r\n- `gpu_context.rs` and `cuda_tensor/*`: Manage GPU initialization, cuBLAS/cuDNN handles (where applicable), custom device buffers, and a simple memory pool to reduce allocations when transferring data.\r\n- `runners.rs`: Provides convenience runners used by the CLI entrypoints (`main.rs`) to invoke example training runs.\r\n\r\n**CUDA: `kernels/gpu_kernels.cu`**\r\n\r\n- Implements atomic-safe memory comparison, element-wise math device kernels (exp, sin, cos, sigmoid branch), vector arithmetic, clipping, tiled matrix multiplication (shared-memory, TILE_SIZE 16), transpose and column reductions. These kernels are used by `cuda_tensor` for operations like `mul`, `transpose`, `col_reduce` and elementwise transforms (sigmoid, ln, exp).\r\n\r\n**Python: `python_scripts/`**\r\n\r\n- `anomaly_detection.py`: Implements Gaussian estimation and threshold selection (F1-based) for anomaly detection \u{2014} a direct NumPy port of the typical ML course algorithms (estimate Gaussian and select threshold by F1 score).\r\n- `neural_net/` folder: Small Python builder, activation, layers and helpers used for experimentation and generating JSON `ModelData` artifacts that can be consumed by the Rust `read_file`/builder logic.\r\n\r\n## Where to look for functionality you might extend or inspect\r\n\r\n- Implement new layers / activations: `src/neural_network/` (add `Layer` impls and wire into `NeuralNetBuilder`).\r\n- Change tensor math: `src/tensor/` traits and `src/cpu_tensor` / `src/cuda_tensor` implementations.\r\n- Add GPU kernels: `kernels/gpu_kernels.cu` and regenerate PTX if required; then extend `cuda_tensor` to call new kernels.\r\n- Add CLI runners: `src/runners.rs` and `src/main.rs`.\r\n\r\n## Notes\r\n\r\n- The Rust `NeuralNetBuilder` supports building from scratch or restoring `ModelData` (weights loaded from JSON). Layers expose `get_parameters()` for serialization.\r\n- `ActivationLayer` caches outputs; activations (sigmoid, tanh, sin, linear) are implemented in `activations.rs` using the `TensorMath` trait.\r\n- `LinearLayer` performs forward via `input.mul(&self.weights)` and backward by computing `weights_grad = input.T * error` then updating `self.weights = self.weights - lr * weights_grad`. Used a bias trick to avoid Broadcasting. Will soon add Broadcasting support.\r\n- `loss_functions.rs` includes stable BinaryCrossEntropy (clipping predictions to avoid log/divide-by-zero) and an MSE implementation.\r\n- CUDA kernels implement a tiled matrix multiply and common elementwise ops; the kernels use shared memory and boundary checks for correctness.\r\n\r\n## Quick pointers for contributors\r\n\r\n- Run tests: `cargo llvm-cov --all-features --html -- --test-threads=1`\r\n- Format: `cargo fmt --all --check`\r\n- Lint: `cargo clippy --all-targets --all-features --release -- -D warnings` (may require installing `clippy` via rustup)\r\n- Keep Python examples and the Rust model importer (`read_file.rs`) in sync if you change JSON model formats.\r\n\r\n## Next steps\r\n\r\n- Add Broadcasting support\r\n- Axis wise reducer\r\n- Move to higher dimensions\r\n\r\n���# Iron Learn ⚙️

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
![Build Status](https://img.shields.io/github/actions/workflow/status/palash90/iron_learn/rust.yml)
[![codecov](https://codecov.io/gh/Palash90/iron_learn/graph/badge.svg?token=A95Y5Y3PRI)](https://codecov.io/gh/Palash90/iron_learn)
![Docs](https://docs.rs/iron_learn/badge.svg)
![Rust Stable](https://img.shields.io/badge/rust-stable-blue)
![Crates.io](https://img.shields.io/crates/v/iron_learn)

A minimalistic Rust machine learning library with optional GPU-accelerated optimization. Built for learning tensor operations, gradient-based algorithms, and numerical computing with an emphasis on type safety and correctness.

## Features

- **GPU-Accelerated Training**: CUDA kernels for Tensor operations. Need to explicitly enable the feature. More on this later.
- **Comprehensive Tensor Support**: Two-dimensional arrays with generic numeric types
- **Complex Number Arithmetic**: Native support for complex-valued computations
- **Zero-Copy Operations**: Borrowing methods for efficient computation reuse

## Network Output

Before we deep dive into the nitty-gritties of the library, let's have a look on few of the examples the neural network presented:

1. [Image Reconstruction](#image-reconstruction)

## Quick Start

### Installation

Add to your `Cargo.toml`:

```toml
[dependencies]
iron_learn = "0.6"
```

### Basic Tensor Usage Example

```rust
use iron_learn::CpuTensor;
use iron_learn::Tensor;

// Create 2x2 matrices
let a: CpuTensor<f32> = CpuTensor::new(vec![2, 2], vec![1.0, 2.0, 3.0, 4.0]).unwrap();
let b: CpuTensor<f32> = CpuTensor::new(vec![2, 2], vec![5.0, 6.0, 7.0, 8.0]).unwrap();

println!("Original A:");
a.print_matrix();

println!("Original B:");
b.print_matrix();

// Add tensors without move
let sum = a.add(&b).unwrap();
println!("Sum:");
sum.print_matrix();

// Subtract tensors without move
let sum = a.sub(&b).unwrap();
println!("Difference:");
sum.print_matrix();

// Multiply tensors (Element wise multiplication)
let product = a.mul(&b).unwrap();
println!("Product:");
product.print_matrix();

// Multiply tensors  (Matrix multiplication)
let product = a.matmul(&b).unwrap();
println!("Dot Product:");
product.print_matrix();

// Divide tensors (Element wise division)
let result = a.div(&b).unwrap();
println!("Division:");
result.print_matrix();

// Transpose
let t = a.t().unwrap();
println!("Transpose of A:");
t.print_matrix();
```

For detailed example, check out [Examples](#examples)

## How to build and run

Prerequisites:

- Rust toolchain (stable or nightly depending on local setup): https://rustup.rs
- For GPU builds: CUDA Toolkit and an NVIDIA GPU (driver + nvcc). If you don't plan to use GPU tensors, CPU-only build is fine.
- Python 3.8+ for the scripts (optional). `cupy` is needed for running `python_scripts`.

The library has two modes - CPU and Cuda. Default is CPU, Cuda comes as an optional feature. If you have CUDA environment setup, you can use `--features=cuda` flag for building and running the code.

Build the basic CPU based Rust library and examples:

```bash
cargo build --release
```

Run unit tests:

```bash
cargo test
```

Run the Rust demonstration runners (examples):

```bash
# This is to get a comprehensive documentation of all the CLI Flags
cargo run -- -h
```

```bash
# Run a neural network example
cargo run
```

If you want to enable CUDA-backed tensors, ensure your environment has CUDA installed and visible to the linker. Typical workflow is the same `cargo build --features=cuda` but the code will initialize GPU devices at runtime when `init_gpu()` or `init_context()` is invoked.

Python scripts can be run directly:

```bash
python python_scripts/k-means.py
python anomaly_detection.py
```

`python_scripts/check_cuda.py` is a small utility to detect/validate CUDA availability from Python; useful for quick GPU checks.

## Examples

### Use GPU Tensor

```rust
# #[cfg(feature = "cuda")]
# {
use iron_learn::init_gpu;
use iron_learn::GpuTensor;
use iron_learn::Tensor;

init_gpu();
// Create 2x2 matrices
let a: GpuTensor<f32> = GpuTensor::new(vec![2, 2], vec![1.0, 2.0, 3.0, 4.0]).unwrap();
let b: GpuTensor<f32> = GpuTensor::new(vec![2, 2], vec![5.0, 6.0, 7.0, 8.0]).unwrap();

println!("Original A:");
a.print_matrix();

println!("Original B:");
b.print_matrix();

// Add tensors without move
let sum = a.add(&b).unwrap();
println!("Sum:");
sum.print_matrix();

// Subtract tensors without move
let sum = a.sub(&b).unwrap();
println!("Difference:");
sum.print_matrix();

// Multiply tensors (Element wise multiplication)
let product = a.mul(&b).unwrap();
println!("Product:");
product.print_matrix();

// Multiply tensors (Matrix multiplication)
let product = a.matmul(&b).unwrap();
println!("Dot Product:");
product.print_matrix();

// Divide tensors (Element wise division)
let result = a.div(&b).unwrap();
println!("Division:");
result.print_matrix();

// Transpose
let t = a.t().unwrap();
println!("Transpose of A:");
t.print_matrix();

# }
```

### Use Neural Network

```rust
use iron_learn::nn::loss_functions::LossFunctionType;
use iron_learn::nn::types::TrainingConfig;
use iron_learn::nn::types::TrainingHook;
use iron_learn::nn::DistributionType;
use iron_learn::nn::LayerType;
use iron_learn::CpuTensor;
use iron_learn::NeuralNet;
use iron_learn::NeuralNetBuilder;
use iron_learn::Tensor;


    let mut nn = NeuralNetBuilder::<CpuTensor<f32>, f32>::new();

    let x: CpuTensor<f32> =
        CpuTensor::new(vec![4, 2], vec![0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0]).unwrap();
    let y: CpuTensor<f32> = CpuTensor::new(vec![4, 1], vec![0.0, 1.0, 1.0, 0.0]).unwrap();

    let monitor =
        |epoch: usize, err: f32, current_lr: f32, nn: &mut NeuralNet<CpuTensor<f32>, f32>| {
            println!("Processing epopch: {epoch}, error: {err}");
        };

    nn.add_linear(2, 4, "Input", &DistributionType::Uniform);
    nn.add_activation(LayerType::Tanh, "Activation Layer");

    nn.add_linear(4, 1, "Hidden", &DistributionType::Uniform);
    nn.add_activation(LayerType::Sigmoid, "Output");

    let mut net = nn.build(
        LossFunctionType::MeanSquaredError,
        &"neural-net".to_string(),
    );

    let config = TrainingConfig {
        epochs: 5,
        epoch_offset: 0,
        base_lr: 1.0,
        lr_adjustment: false,
        weight_normalization: false
    };

    let monitor = |epoch: usize,
                   err: f32,
                   err_val: f32,
                   lr: f32,
                   _nn: &mut NeuralNet<CpuTensor<f32>, f32>| {
        println!("Processing epopch: {epoch}, error: {err}");
    };

    let hook_config = TrainingHook::new(1, monitor);

    net.fit(&x, &y, &x, &y, config, hook_config);

    let prediction = net.predict(&x).unwrap();
    println!("\nPredicted value");
    prediction.print_matrix();


```

## Image Reconstruction

In one of the POCs with a ~99K parameter vanilla neural network, I have tried the Universal Approximation Theorem to reconstruct an image. Following are few snaps from the training of a very complex funtion (an image of Simba).

### The random noise the network started with

![Starting Random Noise](model_outputs/image/images/output0.png)

### Reconstructed image after 200,000 epochs

![Intermediate Reconstruction](model_outputs/image/images/output250000.png)

### Reconstructed image after 800,000 epochs

![Intermediate Reconstruction](model_outputs/image/images/output800000.png)

For comparison, Following is the original image fed to the network.

### Original Image

![Original Image](model_outputs/image/images/original.png)

### Reconstructed image at higher pixels (200 x 200 reconstructed at 512 x 512)

![Reconstructed Higher Resolution Image](model_outputs/image/images/output-512-reconstruction.png)

### Time lapse of regeneration step by step

![Time lapse of regeneration](model_outputs/image/images/timeline.gif)

You can find all the regenerated images in [model_outputs/image/images](model_outputs/image/images) directory.

## High-level Overview of the components

- Rust: Core `Tensor` abstraction implementing `Tensor`s, numeric abstractions, optimization (gradient descent), neural network primitives, and optional CUDA-backed tensor implementations.
- CUDA: `kernels/` contains CUDA kernels used by the Rust `cuda_tensor` and `gpu_context` modules for accelerated matrix ops.
- Python: `python_scripts/` contains helper scripts, experiments and small neural-network examples used for prototyping and data preprocessing.
- Data/Images: Example JSON metadata and image assets under `data/` and `model_outputs/` used by demos and scripts.

## Architecture

![Iron Learn System Architecture](iron_learn_arch.png)
_Architecture diagram generated by Gemini (AI by Google)._

_The diagram above illustrates the relationship between the high-level Rust API, the Core Tensor abstractions, and the dual-backend (CPU/GPU) execution model._

## Quick Module Reference

**Tensor API**

- **Purpose:** Core trait `Tensor<T>` defines creation (`new`, `zeroes`, `ones`), shape/data accessors (`get_shape`, `get_data`), linear algebra (`add`, `sub`, `mul`, `t`, `multiply`, `div`, `scale`, `clip`) and reducers (`sum`). See `src/tensor/mod.rs` for the trait and basic docs.

_NB:_ The library does not yet support broadcasting. I will soon introduce broadcasting logic.

**CpuTensor (CPU backend)**

- **Purpose:** `CpuTensor<T>` implements `Tensor<T>` for CPU operations with plain Rust `Vec<T>` storage and row-major layout. See `src/cpu_tensor/mod.rs`.
- **Highlights:** explicit shape validation, element-wise math helpers, an inner `_cpu_mul` implementation optimized for clarity and basic SIMD-friendly loops, and numerically-stable sigmoid in `element_op`.
- **Limitations:** Currently restricted to 1D/2D tensors.

**GpuTensor (CUDA backend)**

- **Purpose:** `GpuTensor<T>` provides a CUDA-backed `Tensor` using device buffers, kernels from `kernels/gpu_kernels.cu`, and optional cublas-accelerated multiplication (`_gpu_mul_cublas`). See `src/cuda_tensor/mod.rs` and `src/gpu_context.rs` for initialization.
- **Highlights:** device memory pooling, kernel launches via `cust::launch!`, functions for elementwise ops (`element_op`), clipping, transpose (naive), tiled matrix multiply, and column-wise reduce. Uses `GPU_CONTEXT` to find module/function handles.
- **Notes:** GPU ops require `init_gpu()` to be called and a valid `GpuContext`. Multiplication defaults to `cublasSgemm` path when available.
- **Limitations:** Currently restricted to 1D/2D single precision floating point tensors. If any other data type is used, the result may not be returned as expected.

**GPU Context**

- **Purpose:** `src/gpu_context.rs` exposes `init_gpu(...)` and `GPU_CONTEXT` (global OnceLock). It stores CUDA `Module`, `Stream`, `CudaMemoryPool`, and a `CublasHandle` used by `GpuTensor`.

**Gradient Descent / Regression**

- **Purpose:** `src/gradient_descent.rs` implements `gradient_descent`, `linear_regression`, `logistic_regression`, and helpers `predict_linear`, `predict_logistic`. The functions expect `Tensor<f64>` with `TensorMath<f64>` support and follow standard batch gradient updates with optional logistic sigmoid.

**Neural Network**

- **Purpose:** High-level NN abstraction in `src/neural_network/`. Use `NeuralNetBuilder` to add `Linear` layers (`LinearLayer`) and activations (`ActivationLayer`) and then `build()` a `NeuralNet` instance.
- **Model Persistence:** `ModelData` (see `src/neural_network/mod.rs`) serializes model metadata:
  - `name`: model name
  - `parameter_count`: total parameters
  - `layers`: list of `LayerData` objects (`layer_type`, `name`, `index`, `weights`, `shape`)
  - `epoch`: last saved epoch, such that you can resume the Neural Network where is left last.
  - `saved_lr`: learning rate saved with the model. Right now two learning rate adjustment is supported - None (no change in learning rate) and cos annealing.

**CUDA Kernels (quick API map)**

- Located at `kernels/gpu_kernels.cu`. Main exported kernels (extern "C"):
  - `fill_value(float *out, int n, float value)` — fill buffer
  - `vector_arithmatic(const float *a, const float *b, float *out, int n, unsigned int op)` — add/sub/mul/div
  - `clip(const float *s, float *r, int n, float min, float max)` — clip values
  - `element_op(const float *s, float *r, int n, int op, float scale)` — exp/sin/cos/tanh/sigmoid/log
  - `compare_memory(const float *a, const float *b, size_t size, int *result)` — compare arrays
  - `transpose_naive(const float *A, float *B, int M, int N)` — naive transpose
  - `matrix_mul(const float *A, const float *B, float *C, int M, int N, int K)` — tiled matmul using shared memory
  - `column_reduce(const float *inputMatrix, float *outputSums, int numRows, int numCols)` — column sums

**Python scripts (where to look)**

- `python_scripts/neural_net/*` — prototype Python-side neural net builder and helpers used for experiments and model JSON creation.
- `anomaly_detection.py` — feature-wise Gaussian estimation and F1-based threshold selection (useful as a standalone script).

**Data & Model JSONs**

- Example dataset: see `data/image.json` (fields: `m`, `n`, `m_test`, `x`, `y`, `x_test`, `y_test`) — JSON contains flattened row-major arrays for `x`/`y`.
- Example model file: see `model_outputs/image/model.json` — follows `ModelData` schema described above. Use `read_file::deserialize_model()` to load models into `ModelData`, and `NeuralNetBuilder::build_from_model()` to restore a runtime `NeuralNet` from `ModelData`.

## Repository Structure

- `src/` — Rust library and binaries

  - `tensor/` — Tensor trait and backend implementations (CPU/GPU implementations live in `cpu_tensor/` and `cuda_tensor/`).
  - `neural_network/` — High-level NN builder, layers, activations and loss functions.
  - `gradient_descent.rs` — CPU implementations of linear and logistic regression and helper routines (normalization, bias handling).
  - `gpu_context.rs`, `cuda_tensor/` — GPU initialization and device-backed tensor types (CUDA interop, cublas wrappers, memory pools).
  - `read_file.rs` — Helpers for loading JSON model/data artifacts.
  - `runners.rs` — Small CLI-like routines for running `run_linear`, `run_logistic`, and `run_neural_net` examples.

- `kernels/` — CUDA device code

  - `gpu_kernels.cu` — Implementations for tiled matrix multiplication, elementwise ops, clipping, transpose and reductions.
  - `gpu_kernels.ptx` — Precompiled PTX shipped alongside the CUDA source.

- `python_scripts/` — Python utilities and experiments

  - Top-level scripts: `k-means.py`, `check_cuda.py`, `plot_graph.py`, etc.
  - `neural_net/` — Small Python builder, activation, layers and helpers used for rapid prototyping and educational examples.

- `data/`, `model_outputs/image/` — Example datasets, model JSONs and saved weights used by demos.

## What each major component does

**Rust: `src/`**

- `tensor` (trait & implementations): Core abstraction exposing operations such as `add`, `mul`, `transpose`, elementwise math (`sin`, `cos`, `sigmoid`, etc.), and shape/data accessors. Backends implement `TensorMath` for mathematical functions.
- `cpu_tensor/`: Pure CPU tensor implementation used for most algorithms and tests. Most of these are Auto-Vectorized for parallel computation support.
- `cuda_tensor/`: CUDA-backed tensor implementation with device buffers and memory pooling. Integrates with `gpu_context` and uses kernels from `kernels/`.
- `neural_network/`: Provides a `NeuralNetBuilder` and a runtime `NeuralNet` type. Layers implement a `Layer<T>` trait; `LinearLayer` handles weight matrices and updates while `ActivationLayer` applies elementwise activations (sigmoid/tanh/linear/sin). `loss_functions.rs` contains `MeanSquaredErrorLoss` and `BinaryCrossEntropy` used for backprop.
- `gradient_descent.rs`: Implements `linear_regression`, `logistic_regression`, plus helper functions `predict_linear`, `predict_logistic`, and `gradient_descent` steps. Also contains `normalize_features` exposed from `commons`.
- `gpu_context.rs` and `cuda_tensor/*`: Manage GPU initialization, cuBLAS/cuDNN handles (where applicable), custom device buffers, and a simple memory pool to reduce allocations when transferring data.
- `runners.rs`: Provides convenience runners used by the CLI entrypoints (`main.rs`) to invoke example training runs.

**CUDA: `kernels/gpu_kernels.cu`**

- Implements atomic-safe memory comparison, element-wise math device kernels (exp, sin, cos, sigmoid branch), vector arithmetic, clipping, tiled matrix multiplication (shared-memory, TILE_SIZE 16), transpose and column reductions. These kernels are used by `cuda_tensor` for operations like `mul`, `transpose`, `col_reduce` and elementwise transforms (sigmoid, ln, exp).

**Python: `python_scripts/`**

- `anomaly_detection.py`: Implements Gaussian estimation and threshold selection (F1-based) for anomaly detection — a direct NumPy port of the typical ML course algorithms (estimate Gaussian and select threshold by F1 score).
- `neural_net/` folder: Small Python builder, activation, layers and helpers used for experimentation and generating JSON `ModelData` artifacts that can be consumed by the Rust `read_file`/builder logic.

## Where to look for functionality you might extend or inspect

- Implement new layers / activations: `src/neural_network/` (add `Layer` impls and wire into `NeuralNetBuilder`).
- Change tensor math: `src/tensor/` traits and `src/cpu_tensor` / `src/cuda_tensor` implementations.
- Add GPU kernels: `kernels/gpu_kernels.cu` and regenerate PTX if required; then extend `cuda_tensor` to call new kernels.
- Add CLI runners: `src/runners.rs` and `src/main.rs`.

## Notes

- The Rust `NeuralNetBuilder` supports building from scratch or restoring `ModelData` (weights loaded from JSON). Layers expose `get_parameters()` for serialization.
- `ActivationLayer` caches outputs; activations (sigmoid, tanh, sin, linear) are implemented in `activations.rs` using the `TensorMath` trait.
- `LinearLayer` performs forward via `input.mul(&self.weights)` and backward by computing `weights_grad = input.T * error` then updating `self.weights = self.weights - lr * weights_grad`. Used a bias trick to avoid Broadcasting. Will soon add Broadcasting support.
- `loss_functions.rs` includes stable BinaryCrossEntropy (clipping predictions to avoid log/divide-by-zero) and an MSE implementation.
- CUDA kernels implement a tiled matrix multiply and common elementwise ops; the kernels use shared memory and boundary checks for correctness.

## Quick pointers for contributors

- Run tests: `cargo llvm-cov --all-features --html -- --test-threads=1`
- Format: `cargo fmt --all --check`
- Lint: `cargo clippy --all-targets --all-features --release -- -D warnings` (may require installing `clippy` via rustup)
- Keep Python examples and the Rust model importer (`read_file.rs`) in sync if you change JSON model formats.

## Next steps

- Add Broadcasting support
- Axis wise reducer
- Move to higher dimensions

��ݕ	�'&3��������6��xF����jX����jj����v|����}�����=�����>�����[Č���a֌����_�����`�����[����d*�����N@�����2V�
��<g����OtW���nr�# Tensor\r\n\r\nTensor is at the heart of this library.\r\n\r\n## Example\r\n\r\n### Tensor Addition\r\n\r\n```rust\r\nuse iron_learn::CpuTensor;\r\nuse iron_learn::Tensor;\r\n\r\n// Create 2x2 matrices\r\nlet a: CpuTensor<f32> = CpuTensor::new(vec![2, 2], vec![1.0, 2.0, 3.0, 4.0]).unwrap();\r\nlet b: CpuTensor<f32> = CpuTensor::new(vec![2, 2], vec![5.0, 6.0, 7.0, 8.0]).unwrap();\r\n\r\nprintln!(\"Original A:\");\r\na.print_matrix();\r\n\r\nprintln!(\"Original B:\");\r\nb.print_matrix();\r\n\r\n// Add tensors without move\r\nlet sum = a.add(&b).unwrap();\r\nprintln!(\"Sum:\");\r\nsum.print_matrix();\r\n```\r\n��# Tensor

Tensor is at the heart of this library.

## Example

### Tensor Addition

```rust
use iron_learn::CpuTensor;
use iron_learn::Tensor;

// Create 2x2 matrices
let a: CpuTensor<f32> = CpuTensor::new(vec![2, 2], vec![1.0, 2.0, 3.0, 4.0]).unwrap();
let b: CpuTensor<f32> = CpuTensor::new(vec![2, 2], vec![5.0, 6.0, 7.0, 8.0]).unwrap();

println!("Original A:");
a.print_matrix();

println!("Original B:");
b.print_matrix();

// Add tensors without move
let sum = a.add(&b).unwrap();
println!("Sum:");
sum.print_matrix();
```
���
�l)d��1._���`._���`F��|�<�

�ql��v46��j<I�	��l�'46tB<I����SDA Denormalize features using per-feature `mean` and `std` vectors.�����HE Returns a new tensor where each feature column is scaled back to the���A> original value range by computing `value * std[j] + mean[j]`.����
�
�
�
���
���
������2����������������L����l�

����normalized_data�|�mean�$���prln��s��C@ Normalize features using provided `mean` and `std` per feature.�����MJ For each element returns `(value - mean[j]) / std[j]` when `std[j] != 0`,���.+ otherwise `0.0` to avoid division-by-zero.����
�
�
�
���
���
������2�	��������L�	��l�	

�����}$���$�	��	ACFH��w��C@ Compute per-feature mean and standard deviation, and return the���>; normalized tensor along with the `mean` and `std` vectors.�ܕ�
�
�����?�?��?buf��:�?�	�:$x��Lk����B�B�BGlobal�����I������2���������L���l�
�����}$�0257��^��HE Add a bias column of ones to the input tensor `x` and return the new���LI tensor. The new tensor will have shape `[m, n+1]` where the first column��� contains ones.�l��
�
����������������������q�aX���F�F��F��1"`��x9��3�������3������L����<�
�������PRJL\�<����Add���Div����Mul���Sub���Deserialize�\�����	Serialize�L��������*��������\�L�D��d���!��-��>; Creates a new complex number from real and imaginary parts���|� # Arguments�����74 * `real` - The real component of the complex number���A> * `imaginary` - The imaginary component of the complex number���l�
 # Returns����� A new Complex instance���l�
 # Example���<� ```�� use iron_learn::Complex;�����96 let z = Complex::new(3.0, 4.0);  // Represents 3 + 4i�<������  
!�x$��xL�����#�_#��4��<9 Formats complex number in standard mathematical notation���l�
 Examples:���)& - `3 + 4i` for Complex::new(3.0, 4.0)���*' - `2 - 1i` for Complex::new(2.0, -1.0)���l�����<����������#  let z = Complex::new(1.0, 2.0);���+( println!("{}", z);  // Output: "1 + 2i"�<�����
�
�
�
���
�^�^��^��[�^���[����e�S��
��������������������q�aXÅÅą��:����"�"
#$�������%&��&\�4�$$����� Adds two complex numbers�����IF Implements complex addition: (a + bi) + (c + di) = (a + c) + (b + d)i���|�������'$ * `rhs` - The complex number to add���l�������&# The sum of the two complex numbers���l�����<����������#  let a = Complex::new(1.0, 2.0);���#  let b = Complex::new(3.0, 4.0);��� let sum = a + b;���,) assert_eq!(sum, Complex::new(4.0, 6.0));�<����������$$
&$�rhs������()��)\�4�''����#��-* Subtracts one complex number from another�����LI Implements complex subtraction: (a + bi) - (c + di) = (a - c) + (b - d)i�� �|� ��� ��� ,) * `rhs` - The complex number to subtract��!�l�!���!���!-* The difference of the two complex numbers��!�l�!���!�<�!���"���"���"#����"#����# let diff = a - b;���#/, assert_eq!(diff, Complex::new(-2.0, -2.0));�<�#���#������''
)$�#��#��$��+,���,\�%4�%**����*��%" Multiplies two complex numbers��%���%FC Implements complex multiplication using the distributive property:���&-* (a + bi)(c + di) = (ac - bd) + (ad + bc)i��&�|�&���&���'/, * `rhs` - The complex number to multiply by��'�l�'���'���'*' The product of the two complex numbers��(�l�(���(�<�(���(���(���(#����)#��į) let product = a * b;���)2/ assert_eq!(product, Complex::new(-5.0, 10.0));�<�*���*������**
,$�*��*��+��./����/\�,4�,--����1��,)& Divides one complex number by another��,���,?< Implements complex division using conjugate multiplication:���->; (a + bi)/(c + di) = ((ac + bd) + (bc - ad)i) / (c² + d²)��-�|�-���.���.-* * `rhs` - The complex number to divide by��.�l�.���.���.+( The quotient of the two complex numbers��/�d�/	 # Panics��/���/>; Does not panic on division by zero; returns NaN/Inf values��/�l�/���0�<�0���0���0���0#����0#��̚1 let quotient = a / b;���130 assert_eq!(quotient, Complex::new(0.44, 0.08));�<�1���1������--
/$�2��2��4��12��2\�44�400���8�5 Negates a complex number��5���52/ Multiplies both real and imaginary parts by -1��5�l�5���5��6 The negated complex number��6�l�6���6�<�6����6���6���7#����7 let negated = -a;���72/ assert_eq!(negated, Complex::new(-1.0, -2.0));�<�7���8�����00
2$�8t�T�A��ql�35�j<$�36�jl-�37�uTV�38�v4m�39�����3;����3<Neg���3=����3>�7l<$l-�ATVlf4m�y������%�@@������<���\�4�3A
BC�5DEF�5GHI�5JKL�5MNO�5PQR�5STU�6VWX�6YZ[�6\]^�6_"(�v
�@"(�v
�@BCEFHIKLNOQRTUWXZ[]^DCGFJIMLPOSRVUYX\[	_^�3AA��3AA���z�3AA��3AA��.{�3AA��3AA��{�3AA��3AA���{$�3AA��3AA��!|<�3AA��3AA��r|�3AA��3AA���|�3AA��3AA��}��3AA��3AA��e}$�3AA��3AA���}��	�aa���	�<�	��bcnopqrstuwy{|}.0��	:D�	3����``���l�

b���:�
��YT�3�
�
������`�`̥l�

c��$�op_type�<��
c<closure_kind>�d<closure_signature>�d<upvars>�ddcd�������c��e��e��eece��ҧ�c��f��f��ffcf��ҧ�c��g��g��ggcg��ҧ�c��h��h��hhch��ҧ�c��i��i��iici��ҧ�c��j��j��jjcj��ҧ�c��k��k��kkck��ҧ�c��l��l��llcl��ҧ�c��m��m��mmcm��ҧ��$�3�
�
����������������������q�aX����`�`
n��$�̌,�3�
�
���?�?��?���:�?�	�:$x��Lk�����`�`
o��$���4�3�
�
���?�?��?���:�?�	�:$x��Lk���`�`
p��$���=$�3�
�
�
���
����`�`
q��$�������#E\�#3�
�
����������������;t�����`�#`
r���},�#��',��'3�
�
�`�'`
s���},�'��(>$�(3�ͯ��``
t���},�(�}$�(��,7,�,3�
�
��������`�,`
u��$�,�r�,�r�,�-u��v��v��vvuv��ҧקק��/6D�/3�
�
�
���
����`�/`
w��$�/��0D�2w��x��x��xxwx��������42$�43�
�
�
���
����`�4`
y��$�4��4D�7y��z��z��zzyz������86D�83�
�
�
���
����`�8`
{��$�8��8��A2$�A3�
�
�
���
����`�A`
|��$�A��A��D�D3�
�
������`�D`
}��$�Dscalar�4�D��F%����F�<�F�������"$\�F4�F~~����R/��F96 Implements the addition of two `CpuTensor` instances.��G���G�� This implementation of the `Add` trait enables the addition of two tensors with the same shape. The operation is element-wise, meaning each element in one tensor is added to the corresponding element in the other tensor.��I���I # Type Parameters���Ic` - `T`: A type that implements the `Numeric` trait, ensuring the elements can be added together.��J�d�J	 # Output���J74 The output is a `Result` type that either contains:���KKH - `Ok(Tensor)`: A new `Tensor` representing the sum of the two tensors.���KTQ - `Err(String)`: An error message if the shapes of the two tensors do not match.��L�d�L	 # Errors���Lwt - `ShapeMismatch`: Returned when the shapes of the two tensors are not identical, preventing element-wise addition.��M�l�M���M�\�M ```rust���M" use crate::iron_learn::Tensor;���N use iron_learn::CpuTensor;��N���NIF let tensor_a = CpuTensor::new(vec![2, 2], vec![1, 2, 3, 4]).unwrap();���OIF let tensor_b = CpuTensor::new(vec![2, 2], vec![5, 6, 7, 8]).unwrap();���Ofc let tensor_sum = (tensor_a + tensor_b).expect("ShapeMismatch: Mismatch in shape of two Tensors.");���PLI // tensor_sum now contains the element-wise sum of tensor_a and tensor_b�<�Q���Q���Q�~ Note: This method supports all numeric types defined in the `numeric` module, allowing for a wide range of tensor operations.��R������~~
���$�R��R��S%������S�<�S�������"$\�S4�S������_/��S96 Implements the subtraction of two `Tensor` instances.��T���T�� This implementation of the `Sub` trait enables the subtraction of two tensors with the same shape. The operation is element-wise, meaning each element in one tensor is subtracted to the corresponding element in the other tensor.��V���V���Vhe - `T`: A type that implements the `Numeric` trait, ensuring the elements can be subtracted together.��W�d�W����W7����WRO - `Ok(Tensor)`: A new `Tensor` representing the difference of the two tensors.���XT���Y�d�Y����Yw���Z�l�Z���Z�\�Z����Z"����[���[���[I����\I����\fc let tensor_sum = (tensor_a - tensor_b).expect("ShapeMismatch: Mismatch in shape of two Tensors.");���]L��<�^���^���^����_��������
���$�_��_��`%������`�<�`��������$&\�`4�`������m/��`<9 Implements tensor multiplication using the `*` operator.��a���a�� This method enables the multiplication of two tensors, akin to matrix multiplication. It requires that the number of columns in the first tensor matches the number of rows in the second tensor, following the rules of matrix multiplication.��c���c���cqn - `T`: A type that implements the `Numeric` trait, which includes all numeric types supported by the library.��d�d�d����d7����eOL - `Ok(Tensor)`: A new `Tensor` representing the product of the two tensors.���etq - `Err(String)`: A formatted error message if the dimensions of the two tensors do not allow for multiplication.��f�d�f����f�� - `ShapeMismatch`: Returned when the number of columns in the first tensor does not match the number of rows in the second tensor.��h�l�h���h�\�h����h"����h���h���iOL let tensor_a = CpuTensor::new(vec![2, 3], vec![1, 2, 3, 4, 5, 6]).unwrap();���iRO let tensor_b = CpuTensor::new(vec![3, 2], vec![7, 8, 9, 10, 11, 12]).unwrap();���jyv let tensor_product = (tensor_a * tensor_b).expect("ShapeMismatch: The dimensions of two matrices are not matching.");���kGD // tensor_product now contains the product of tensor_a and tensor_b�<�k���l���l�� Note: This method is designed to support all numeric types defined in the `numeric` module, ensuring compatibility with a wide range of data types.��m��������
���$�m��m��m+������n���l�n�������*,\�n4�n������n�n������
���$�n�o���������������ҧ��p+������p�<�p������������������������������������������������q=��p:7 Creates a new tensor with the provided shape and data.���q+( Wires to the internal validation logic.��q�ͯ����
����},�q�}$�q��r 4�r�
�
�����r�
����},�r��s$�s�
�
�����t�
����},�t��u ��u$! Returns the shape of the Tensor.�L�u�
�
���
���u�
���$�u��v��vB? Returns the data (cloning it to give ownership to the caller).�D�v�
�
��ͯ��v�
���$�v��x��wB? Synchronize with GPU. As this is a CpuTensor, this is a no-op.�\�x��
�����y1��x" Adds two Tensors element-wise.���y)& Wires to the internal addition logic.��y�
�
�
���
������y�
���$�y��y��{1��z30 Subtracts rhs from current tensor element-wise.���z,) Wires to the internal subtraction logic.��{�
�
�
���
������{�
���$�{��{��|1��{ Matrix multiplication.���|/, Wires to the internal multiplication logic.��|�
�
�
���
������|�
���$�|��|��~#��} Transpose a 2D matrix.���}*' Wires to the internal transpose logic.��~�
�
������~�
���$�~��4��~30 Hadamard product (element-wise multiplication).���1. Wires to the internal Hadamard product logic.�4��
�
�
���
�������
���$����Ȁ1̪� Element-wise division�ˀ�
�
�
���
�����π�
���$Ѐ�ր�ف2���63 Element wise scaling (multiplication by a scalar).�,܁�
�
���������
���$���4��͂6��� Clamp the value�$Ђ�
�
���������Ղ�
���$ւ�r܂�r����B�������̥l����������������������������
���������������t������|��T���������5<���
�
����������������������q�aX��������„�
���$���1���
�
��������
���$�����0������������
���$�����1������������
���$���݇1�����������
���$��ň1Ȉ�������̈�
���$͈���2$������������
���$�����1������������
���$�����2$������������
���$����D������������
���$��t�T��������ql
����uT<
����v4[
����
l
�'
T<
�L
4[
���
�d2
/ Perform a single gradient descent update step.��
���D
A - `x`: input features (may include bias column if already added)���
 - `y`: target outputs���
 - `w`: current weights�ĕ
 - `l`: learning rate���@
= - `logistic`: whether to use a logistic (sigmoid) activation���
������׃�׃����������������������q�aX׃���2������
�����
��׃�
���l�
�׃��L�
�׃����
׃���׃t�

���׃���
���
w��
l��
logistic�D�
������"���2l���<�@����qlf����uT�����v4�����io�����Write�,�����l�')�@�Vlf�yT�l�4�<��t�,������;8 Predict outputs for `x` using linear model weights `w`.�t��������������2������������L���������������t���l�
�����������fhkm�����;8 Train a linear regression model using gradient descent.����� - `x`, `y`: training data���%" - `w`: initial weights (consumed)�ıŁ�� - `e`: number of epochs��������������������2������������L������t���l�
�������������������egjl�5�=���2l���<�;����qlV����uTw����v4�����������׆,�������l�)"�;�MlV�iTw4�<��t�,������;����=: Train a logistic regression model using gradient descent.�����A> Same parameters as `linear_regression`, but applies a sigmoid��� activation during training.��������������������2������������L�����t���l�
�������������������egjl�����C@ Predict binary labels for `x` using logistic model weights `w`.�����63 Returns a tensor of predicted labels (0.0 or 1.0).����������������2������������L������t���l�	
�����������KMPR������������������������D�����������E�����Gt����CT����Cd����l������
����L0�����qlO����uTw����dL�������N��������v4������$����Read�$�����$��-����l�������%L0�?lO�bTw��L�����l�4�l�$�l�$�|�$���%l��������������d
��N��d��	��
��d���e���e���e���e���e�00#�t����������2������������L�����t���<���l���<�
������
$��d�_adf��  # Application Context Module�!��%JG Provides global application state management and capability detection.�p��t=: Manages the single global application context containing:���*' - Application metadata (name, version)���63 - Training hyperparameters (learning rate, epochs)���,) - Data configuration (path to data file)���2/ - GPU capability flags and CUDA context handle�����PM The context is initialized once at application startup and remains immutable���LI throughout the program lifetime using `OnceLock` for thread-safe access.�D���OnceLock�D��7�������
�����\��	����l��
����D�ܵ����/��41 Global singleton instance of application context�����QN Thread-safe access to the immutable application state initialized at startup.���JG Use `GLOBAL_CONTEXT.get()` to access the context after initialization.�t��7�7���7once��7�7��7�7�U�7'i%��T���C������#\���%l��� a��-* Initialize the global application context�����\Y Must be called exactly once at application startup. Subsequent calls will fail silently.���YV This function captures all training configuration and GPU state for access throughout�� the application lifetime.���|�������)& * `app_name` - Application name/title���,) * `version` - Application version number���*' * `data_path` - Path to JSON data file���63 * `learning_rate` - Gradient descent learning rate���.+ * `epochs` - Number of training iterations���KH * `gpu_enabled` - Flag indicating whether GPU acceleration is available���DA * `context` - CUDA context handle (None if GPU is not available)���OL * `lr_adjust` - Flag indicating whether learning rate adjustment is enabled���KH * `hidden_layer_length` - Number of hidden layers in the neural network���FC * `weights_path` - Path to model weights file, the parameters file���vs * `monitor_interval` - The interval on how many epochs, the monitor should be called for internal state monitoring����� * `sleep_time` - Sometimes the workload is high and CPU/GPU gets exhausted and machine generates a lot of heat, you may choose to let it cool down���\Y * `name` - Name of the model. A similarly named directory must exist from execution path���41 * `restore` - Restore a network from model file.���96 * `distribution` - Weight initialization distribution�� �d� ��
��~D� �<� �~\� �$� d%$-��Parser�49#����!����@dW����~Tz����@t������l��
��d349�FdW�iTz��t���%l���
,��:7 Initialize the application runtime and global context.�����:7 This function performs the following high-level steps:�����>; 1. Parse command-line arguments into `Args` (uses `clap`).���DA 2. Resolve the requested weight initialization distribution into���EB    `DistributionType` (e.g. `Normal`, `Xavier`, `Uniform`, `He`).���GD 3. Decide whether to enable GPU execution based on the `--cpu` flag���?<    and whether the crate was built with the `cuda` feature.���C@ 4. If GPU execution is enabled and the binary was compiled with���FC    the `cuda` feature, attempt to initialize CUDA (via `cust`) and���B?    cuBLAS. On success it will create a CUDA module and stream,���DA    initialize the global application context via `init_context`,���30    and call `init_gpu` to attach GPU resources.���HE 5. If GPU initialization fails (or CUDA support is not compiled in),���FC    the function falls back to CPU mode and initializes the context���    accordingly.���	GD 6. Finally, the function retrieves the initialized `GLOBAL_CONTEXT`���	>;    and prints a friendly status banner by calling `greet`.��
�T�
 Notes:���
DA - This function does not return a value; it performs global side���
EB   effects (initializing `GLOBAL_CONTEXT` and printing to stdout).���DA - If CUDA initialization fails, the function prints an error and���=:   continues in CPU mode rather than aborting the process.����� Example CLI usage:���\� ```text���WT cargo run -- --name my_run --lr 0.01 --epochs 1000 --data-file data/neural_net.json�<�
��d�
��
�Ԙ,�������
�ctx��l3L7���fs�	���ֈ$ �	����L6����qlJ���<	�$ �*.l2L6�AlJ��m������������������������q�aX��w�w��w�err�w�	��~�2��������l�
����~L����������������������
�"�f+�c������`��������������������;t������2��������l�
����~L�tBTF����<�Q���1�4
���2�J���@t�����A�����ֈ$��	���=������=t�����>������>������2��
����ql�����uT�����v4������2l����<�����4�J���wt�ܑ��\�$�����t�����������l���T�4��l���}��FC Run linear regression using configuration from the global context.�����KH The function loads data, performs normalization, trains a linear model,���IF evaluates on test data (if present), and prints MSE and RMSE. Returns���+( `Ok(())` on success or an error string.�T���������������������q�aX�����2�����������L�����t���l�
�����9;>@��������������������������HE Run logistic regression using configuration from the global context.�����GD The function reads data and runtime settings from `GLOBAL_CONTEXT`,���EB trains a logistic model, evaluates on test data (if present), and���KH prints summary metrics. Returns `Ok(())` on success or an error string.�d������2�����������L������t���l�
�����9;>@��������������������lR,Z��	�
�	���	�	�������L@�����ql_�����4x#����!���	ValueEnum�L�B����!�����\�����������L����������+��5L@�Ol_dr4x|�L���\�L�tb4j���
�
��N�������<4����<=����$T���BufRead�<h���	BufReader�Lq����4�����D����?������@t�����B������gt�����hd�����tt�����dL��������\�����������L����������������$��-��SliceRandom�\�#����<��Q��control�=�""��customcolors�e�
""���Colorize�E�'""���
ColoredString�m�!""���CustomColor�]�""���Style�-�""���Styles�5�""���Color�-�""������!$<4<=lK$T�^<hLq\�4���D���2����)t���-���� t���d���t���L���\�L�<��|�$�<���\���<�����������2����������������2��t���<������<�
�����JLOQ4��������������������������������������q�aX������������������������������Chars����	�q�,�\L������������������L����������������������(/��������������������
���������base���.>�$��G�GRandomState��Gk0���Gk1�����7������9:�������������������������›�Q�Q�Q��Q��>H��ʒ�����,�L���������������������e'��e����e
��
$�e�g��������������i�������������
��	�k������������������k������������������k������������������r�v�������@t����A�O����B�������\��	���L������ql�����uT�����v4�����dL�������N��������<��Q��ImageBuffer�\�,�1��Luma�$�,�0����,�0���4�����D��������
����2l����������$��-���gt�����hd�����)t�3,�O�e-����#\���L���l���T���4���L�������<�Ԋ\�$�\�4���D�������l�<��|�$��� t���d������TQ Train and evaluate a neural network using configuration from the global context.�����GD This function builds a neural network according to global settings,���KH loads optional saved weights, runs training with a monitoring callback,���NK and prints predictions for non-image tasks. Returns `Ok(())` on success or��� an error string.�t������2�����������L�����t���<���l���<�
�����IKNP����������������������!K�������������������������›
����ק�������������'��������������������)��������������������3��������������������4���������������������8���8�������������������������������q�aX���������2����9���9���9��L�9��l�9
��������9��4�9��$�9DFIK��@���@����������2����@���@���@��L�A��A��t�A��<�A��l�A��<�A
�����hl��@input�,�@�d�@hjmo��H`T�H�������
����H
���,�Hx_data�4�Hy_data�4�Hheight�4�I�,�I�
$�I��L]L�L���?�?��?���:�?�	�:$x��Lk�������L
�points�4�L��,�L��4�L�,�L�
$�L�����!t���T�Ăd���\�����������Rng�
#����@t/����B�_��������
����������gt�����hd�����ql�����tt�����uT�����wt�����dL�������N��������v4�����׆,����sleep�,�����D�Ó���<��Q��L
�)t/�C-�_�v#����+����0t�d��l���t���T���t���,L���4�t�,���,���D�<�l�L���UnicodeSegmentation��u����)��04�7���?�?��?���:�?�	�:$x��Lk�����P
�text�$J������������������t�T�����IL����<-����<6����$M�����<a�����Lj����L�$<-<6lD$M�W<aLj�wT����J��J��K��KM붏��DFM붏��DF����� $�����������.>�$������� $�����������.>�$�������T�����U������������������������q�aXːÍ���
��~L���������������������������������D������������������D�	�����������������d�<���?�?��?���:�?�	�:$x��Lk�����t�L��������?����?�?��?���:�?�	�:$x��Lk���
�probs�,�temp�$�$��������������ܙܙ��
���
�����2������
���
�����2��t���<�������<�
�����JLOQ���,������������›�����2������������L�����t���<���l���<�
�����context�<�
train_data�T�val_data�D��M��KT�sequence_length�|�����$��������������������������������������������$�!��������������������#���������������������(�����������������������›���������-���-�ː›�����2������-���-����.���.2��t�/��<�/���/��<�/
�������|�-vocab�,�-�M�.hjmo$�6��������������������7�������������������$�>���������������������L�A�����������������ܙ4�A������������������������Less��������Greater��ji�/޾��I�\�I�������ː›���2����I���I���I����J���K2��t�K��<�K����K��<�K
������<�I��|�I��,�J�YD�J�YL�Juwz|��h�L�h���ːÍ��������������������q�aX����h
���|�h��,�hlines�,�hT�������������������������N�����dL�����\�����������L����������a|��������
��_,����`\����ql�����K���^<|���\|����<$����\T�
���;<����]l����<$����]T����;����;����^l� ��|�<���@t5������d����T������W������L�������L�����ql�����uT�����dL�������v4�������D�"����_,�����`\�����a|�(�������	�
��l�)t5�I+�d�z)����(����L���L��l���T���L�l�4���D���!��IF Builder type for constructing `NeuralNet` instances via a fluent API.������2�������������t���l���^PMD�u���=?BD��!4�����?�?��?���:�?�	�:$x��Lk����Box�������lf���]v���������������2�����t������L��������<���l���<������+-PR��<�����
�����������2�����t������L���������<���l���<���������������DFik�������
����������:7 Add a new fully-connected linear layer to the builder.�T��������������
�����$�
input_size�T�output_size�\�	�
$�	�d�	��<��+( Add an activation layer to the builder.�t������������
�����$�act���
$���
ZԽ
 Add an Embedding Layer�l�
��������
�
�����$�
�KT�
�U<��UL��
$������>; Add a complete multihead transformer setup with embeddings���+( head_dim: dimension per head (e.g., 16)���2/ num_heads: number of attention heads (e.g., 8)���GD This will create an embedding with embed_dim = head_dim * num_heads�̾�����������
�����$��KT��U<��YD��YL��d������UR Add a Transformer Block for sequence of tokens with per-token multihead attention���FC per_token_embed_dim: embedding dimension of each token (e.g., 128)���30 seq_len: number of tokens in sequence (e.g., 5)���2�����������������
�����$��X���U<��YL��
$��d������>; Add a Transformer Block with single head (default 8 heads)����������������
�����$��UL��
$��d������SP Add a Transformer Block with specified number of heads for Multi-Head Attention��� �������������
�����$��UL��YL��
$��d��� x�� ������›�� �
�����model�,� �d� ,�#�������������������d�$������������������������������lf���]v�������������.Q��-52 Finalize the builder and construct a `NeuralNet`.�,�.������›��.�
�����$�.�ed�.�
$�.��/�l�/������›��0�
������ed�/�
$�/�N4�0<�1�����������������������>?��>��›��
�������,�>,�A���������������������t�������������\����������L���������ql:����uTb����[4y�����\L�*l:�MTblr4y������������������������2��������������t���l�
�����	loss_type�L�BDGI�����������������2���������������t���l�
�����actual�4�	predicted�L�PRUW���L��������������2���������������t���l�	
�������4���L�CEHJ��
�
�������������2����
���
���
���
��t���l�
�����y_true�4�
y_pred�4�
MORT���L��������������2���������������t���l�
�������4���4�CEHJ����������������2��������������t���l�
�������4���4�CEHJ���L��������������2���������������t���l�
�������4���4�CEHJ��\����������
���`\8����_,P�����Lb�����^������ql�����uT�����v4��������)\8dI,P�[Lb�q<|��A��l�ĩT�4������������������2������������L������t���<���l�
�����σ,�eps��UWZ\L��������������������������
���
����������2�������
���
��L�����t���<���l�
�����scores�4�
OQTV��"�����2�����������7�yޚ����������358:d�$������|�d������t�\������|�T����d�<����t�L������T��������������������;t�������$<�������PhantomData�Rҹ��^=x����z���2�����t������L��������<���l����� CE��M��������
������KT��U<��UL��
$���$H��$���������$�
�����$�$�`<�$�},�$��&����2�����t�&���&��L�&���&���&��<�&��l�'�����������������OQtv��'H<�'������������'�
�����$�'σ,�'is_training�\�'��;QD�;��������������;�
�����$�;output_error�d�;�	�;_norm�,�;��L%t�M��������M�
�����$�M��O$�O�������O�
�����$�O��O"T�O���������O�
�����$�O��P��P������P���W��W���W���W���W�
��JD|gL��
��JD|gL����tv$�P�P�����$�P�P�����$�P�P�������Pd�P����?�?��?���:�?�	�:$x��Lk�ͯ����Q!��Q���2������Q���Q��L�Q���Q��t�Q��<�R��l�R����/����������������gilnd�R$�R�������RT�R�����ąS,�S�������S�S�����ĿS,�S�������S\�S�������T�T�������T�T�������T��T���t�UL�U���l�UD�U���L�U4�U�������V|�V�����V",�V�������������������;t�������Vy���2�����t�W���V��L�W��W���V��<�W��l�W�������')LN��WG�W����������W�
������
$�W�UL�Xdist�$�X��X^T�X����������Y�
������
$�Y�UL�Y�YL�Y��$�Y��e���cDA Create transformer for multihead attention on sequence of tokens���cF����d3����d2����e����������e�
������
$�e�X��e�U<�e�YL�f��$�f�������������������ȁ�
�����$Ɂ�u4ׁ	batch_idx�L�head_idx�D���U<���Ň��ȇ����������������
�����$�buffer�4��	head_grad�L����L����Dƈ�U<߈	total_dim�L���������2�����t�������L���쫍�����<ˍ��lۍ�����������������RTz|���$����������
�����$�����"T�������������
�����$�����H<���������������
�����$��σ,����\�����PD���������������²�
�����$Dz��dͲ�	߲norm�$����%t������������
�����$����+��������L���\���L�č
��IF Function pointer type for activation functions and their derivatives.�d�
������
������!����
C@ Function pointer type for loss functions and their derivatives.�4���������	|�\���������������
�
��\����������L���������ql:����uTb����[dz�����v4������\L�*l:�MTb�rdz4������B? Return the activation function and its derivative for `layer`.�|�����ʉʉ���2��������������t���l�
�����layer�,�>@CE<����������������������<������������������ߏ����2/ Element-wise ReLU activation: f(x) = max(0, x)�$����������2����	������	��	��t�	��L�	��l�	
�����σ,�	BDGI��
���
MJ Derivative of ReLU; expects the original input (or the activation output)���
 f'(x) = 1 if x > 0, else 0�T�
���������2��������������t���L���l�
�����σ,�BDGI��v��$! Element-wise sigmoid activation.�<����������2������������
��t�
��l�

�����σ,�:<?A�����
B? Derivative of sigmoid; expects the activation output as input.�l����������2���������������t���L���l�
�����output�4�GILN��s��/, Element-wise hyperbolic tangent activation.�$����������2���������������t���l�
�����σ,�:<?A�����=: Derivative of `tanh`, expects activation output as input.�T����������2���������������t���L���l�
������4�BDGI��r��! Element-wise sine activation.�����������2���������������t���l�
�����σ,�:<?A����@= Element-wise cosine function (used as derivative for `sin`).�����������2��������������t���L���l�
������4�BDGI�����=: Aggregating activation: f(x_i) = exp(x_i) / sum(exp(x_j))�<����������2��������������t���L���l�
�����σ,�BDGI<��������������������$����������������������<���������������������� ��� B? Identity derivative for Softmax when paired with Cross-Entropy�l� ���������2����!��� ��� ��!��t�!��L�!��l�!
������4� BDGI\�t�4�����
�\|�����L!�����qlA����uTi����v4����Distribution�d�#&���4�v�
��ݧ<�#�
���'|L!�1lA�TTi�y4���+d�4�<�����.+ Trait representing a neural network layer.�����KH Layers must implement forward and backward passes and optionally expose���52 their parameters for inspection or serialization.�,�����2���������������2��׃�L��׃��׃��׃t�׃<���l��̫�̫����������������������I<����ԫ�׃�����
�ԫ׃�$�σ,���\����D����ԫ�׃������
�ԫ׃�$���d��~l��h����%t���ԫ����������������;t���׃���
�ԫ׃�$���$���ԫ����
�ԫ׃�$���#T���ԫ������
�ԫ׃�$����MJ Fully-connected linear layer holding weights and an optional input cache.�\����2�����������L������t���<���l���G��ȸd+�����UWZ\T�<��������\������d�$��������T��������$<��������
t���2�����t�
���
��L�
���
���
��<���l������!#FH���������������
�������T���\��d�����������������������#�
#�
#�
ݧ#�
�#�����^�#�#�	ThreadRng�#�rng�#�9-%~u�Yv�
v�
�v�
��v�v�
std_dev�v�3����K%����������������������������������q�aX�������
�������T���\��
$��d���0L����������
������`<��
$�������2�����t������L���������<���l������������������OQtv��$���������
�����$���H<��������������
�����$�σ,���\���ZD����������������
�����$���d��	�normalize_grad�t���%%t�%��������&�
�����$�&��'"T�'���������'�
�����$�'��( ��'LI Activation wrapper layer that applies element-wise activation functions.�|�(���2������(���(��L�(���(��t�)��<�)��l�)���&-�/������SUXZ��)T�)�������)d�)�����d�)$�)�������*$<�*�������*x���2�����t�*���*��L�*���*���*��<�+��l�+���@B��+5��+,) Now takes two function pointers as input��+��������+�
������
$�+�WT�+��-����2�����t�.���-��L�.��.���-��<�.��l�.��������������DFik��.$�.�������.�
�����$�.��/H<�/������������/�
�����$�/σ,�/��\�/��1ND�1��������������1�
�����$�1��d�1_lr��2�2�3���������������������6"T�6���������6�
�����$�6��?|���,�\��l�t�T����R�5������g����ql�����uT�����v4�����wt����ϝL������L�����������$����������׆,�����$��-���gt�����hd�����_O����`
O����a	O������x"�����x"������x"������x"������x"������x"������x"������x"������O�
��l�,�5�L+�g�}l���T���4���t���L���L�<��l�$�<��t�,�|�$��� t���d�<�����*' Feed-forward neural network container.�����GD Holds an ordered list of `Layer` trait objects, the configured loss���EB function, and training metadata (parameter count, name/label, and���@= learning state). Instances are used to `predict`, `fit`, and��� `save_model`.�L����2�����������L�����t���<���l�›00#�t�������������_adf��%4����ę|�����,�������$�������l����l�T��������|��������l��������d��������!l�����?�?��?���:�?�	�:$x��Lk���������	f���2�����t�	���	��	���	��<�	��l�	›���������35PR��	J�	���›��
������N4�
��,�
��(��
85 Get the current epoch (useful for resuming training)�����›���
�����$���1��85 Set the current epoch (useful for resuming training)�����›���
�����$���,���9��A> Run a forward pass and return the network output for `input`.�<����›��������
�����$�σ,������������›���������������g��g��g��h��h��h�&���Z�����h��i��i��U���i����z��"��f›������f��������������������›�� ������
�������$�x_train�<�y_train�<�x_val�,�y_val�,�config�4�hook_config�\�����0#L�0���›����0�
�����$�0��8;��8�������8�
�������,�8filepath�D�8�;�����������������������inner��.��g�<�����>(��>EB Serialize and write the model weights and metadata to `filepath`.�T�>���›���>�
�����$�>��D�>��@3��?+( Get the epoch vs loss data for plotting�|�@��›����@�
�����$�@l�,����ql����l�$t/�2����>���g��g��g��h��h��h�&���Z���&���Z�����rt�G4K���^db��t{<������l�����������$d��h��f��h��2��������f����h����2������������������������l����h��(���h��i��i��U���i����z��"�h���������z��"�����
	|�D�������D����<���������Rҹ��^=x�h����",���������Rҹ��^=x����m�h��f��h��2��������������������������������)�����l�����MORT��0�������
��h�������iD��iD�|�� # Numeric Trait Module���`] This module defines the `Numeric` trait which abstracts over the basic arithmetic operations���b_ and provides methods to return special values like zero and one. It is implemented for various���c` built-in numeric types and a custom `Complex` type, enabling their use in mathematical contexts���*' where generic operations are required.����� ## Implementations���fc The `Numeric` trait is implemented for standard integer and floating-point types provided by Rust,���gd as well as for a custom `Complex` type defined in the `complex` module. This allows the types to be���PM used interchangeably in algorithms that require basic arithmetic operations.���d�	 ## Usage���c` The trait can be used to perform arithmetic operations in a generic way. For example, it can be���if used to write functions that compute the sum of two numbers, regardless of whether they are integers,���/, floating-point numbers, or complex numbers.���|� ## Features���@= - Generic arithmetic operations: `Add`, `Sub`, `Mul`, `Div`.���c` - Special values: `zero()` and `one()` methods to return zero and one of the implementing type.���`] - Compatibility with custom types: Can be implemented for user-defined types like `Complex`.�<������\�	����������L�	���������x<�
�����	\�	L�	��
<�
�����
TQ The `Numeric` trait defines a set of operations that numeric types must support.���
gd It includes basic arithmetic operations and the ability to return special values like zero and one.�����nk Types implementing `Numeric` can be used generically in contexts where arithmetic operations are required.�<���̫����ԫ$��ԫԫ��ԫԫ�ԫl��ԫԫ�
ԫԫ�ԫl�
�ԫԫ�
ԫԫ�ԫl�
��ԫԫ��
ԫԫ��ԫl�
�_ԫ��
�_ԫ|��ԫԫ���ԫԫ����ԫ����ԫL��̫Pʂ	Eڂ	8�	(��	��	��	�Ń	�݃	��	���	���	���	���	��ׄ	���	}̫�ʂ	�ڂ	��	���	���	v��	hŃ	W݃	I�	8��	/��	&��	��	�ׄ	���	�����������������������'$ Returns the zero value of the type.�$�ԫ��
�ԫ����&# Returns the one value of the type.��ԫ��
�ԫ���� Returns f64 equivalent of t����ԫ���
�ԫ$����� Returns f32 equivalent of t����ԫ���
�ԫ$��� ��'$ Casts the value to Self and returns�D�ԫ��
�ԫ�,��� ��'��	D�ԫ��
�ԫ�,���?��a^ The `SignedNumeric` defines all the `Numeric` types that can be signed like `i32`, `i64` etc.�l���̫��B�ԫ<��ԫ�ԫ�ԫl��̫L֍	A�	7��	*̫d֍	Y�	O��	B����������������������$���
������
���������
�$���������
�$���D���
��,���D���
��,�����������������������$���
������
���������
�$���������
�$���D���
��,���D���
��,�����������������������$���
������
���������
�$���������
�$���D���
��,���D���
��,�����������������������$���
������
���������
�$���������
�$���D���
��,���D���
��,�����������������������$���
������
���������
�$��� � ���� �
�$� �� D� ��
��,� ��!D�!��
��,�!��!��������������������!$�"��
���"�"��
���"�"����"�
�$�"��#�#����#�
�$�#��#D�#��
��,�#��#D�#��
��,�$��$��������������������$$�$��
���$�%��
���%�%����%�
�$�%��%�%����%�
�$�%��&D�&��
��,�&��&D�&��
��,�&��'��������������������'$�'��
���'�'��
���(�(����(�
�$�(��(�(����(�
�$�(��(D�(��
��,�)��)D�)��
��,�)��)��������������������*$�*��
���*�*��
���*�*����*�
�$�*��+�+����+�
�$�+��+D�+��
��,�+��,D�,��
��,�,��,��������������������,$�,��
���-�-��
���-�-����-�
�$�-��-�-����-�
�$�-��.D�.��
��,�.��.D�.��
��,�.��/��������������������/$�/��
���/�/��
���0�0����0�
�$�0��0�0����0�
�$�0��0D�0��
��,�0��1D�1��
��,�1��1��������������������2$�2��
���2�2��
���2�2����2�
�$�2��3�3����3�
�$�3��3D�3��
��,�3��4D�4��
��,�4��4��������������������4$�4��
���5�5��
���5�5����5�
�$�5��5�5����5�
�$�5��6D�6��
��,�6��6D�6��
��,�6��7��������������������7$�7��
���7�7��
���8�8����8�
�$�8��8�8����8�
�$�8��8D�8��
��,�9��9D�9��
��,�9��:��9QN Implementation of `Numeric` for the `Complex` type from the `complex` module.�����������������������;��:/, Returns a complex number representing zero.�$�;����
���<��;.+ Returns a complex number representing one.��<����
���<�<������<�
�$�<��=�=������=�
�$�=��>D�>����
��,�>��?D�?����
��,�?��?Ԉ@Ԧ@��@��@�AԡAԿA��A����B&��Bfc The `FloatingPoint` defines all the `SignedNumeric` types that can be signed like `f32` and `f64`.�l�B��̫��B��ԫl�C�̫*��	̫6��	*��������������������������
�������������ĔC,�C��ԫԫ��C�
�ԫ$�C��C$�C��ԫԫ��C�
�ԫ$�C��C�C��ԫԫ��C�
�ԫ$�C��C�C��ԫԫ��C�
�ԫ$�C��D�D��ԫԫ��D�
�ԫ$�D��D�D��ԫԫ��D�
�ԫ$�D��D$�D��ԫԫ��D�
�ԫ$�D��D�D��ԫԫ��D�
�ԫ$�D��D�D��ԫԫ��D�
�ԫ$�DĊE,�E��ԫԫ��E�
�ԫ$�E��E#�E���ԫ�ԫԫ��E�
�ԫ$�E�,�E��F#�F���ԫ�ԫԫ��F�
�ԫ$�F�,�FԻGd�Gԫ��
�ԫ��G�����������������������������������G$�G����H�
�$�H��H�H����H�
�$�H��H�H����H�
�$�H��I�I����I�
�$�I��I�I����I�
�$�I��J$�J����J�
�$�J��J�J����J�
�$�J��K�K����K�
�$�K��K,�K����K�
�$�K��L,�L����L�
�$�L��Ld�L��
�ԏM�����������������������������������M$�M����M�
�$�M��M�M����M�
�$�M��N�N����N�
�$�N��N�N����N�
�$�N��O�O����O�
�$�O��O$�O����O�
�$�O��P�P����P�
�$�P��P�P����P�
�$�P��Q,�Q����Q�
�$�Q��Q,�Q����Q�
�$�Q̆Rd�R��
�|�<����j<�����v4�����<4��t&��������2���\��5��C��L8���<F
�����labels�4Tnum_classes�\hlabels_per_sample��~dfjl��zt�������������������������q�aX������3�����������<������L�
������u4���	��FHKMt��) & # Tensor Module - Linear Algebra Core�* ��.V S Provides the foundational `Tensor` data structure and comprehensive operations for���K H linear algebra computations essential to machine learning applications.�� ���  ## Design Philosophy�� ���; 8 The tensor module is built around these key principles:���K H - **Generic**: Works with all numeric types through the `Numeric` trait���L I - **Safe**: Result-based error handling; no panics on invalid operations���G D - **Flexible**: Both consuming and borrowing variants of operations���I F - **Clear**: Extensive documentation and examples for all public APIs�� ���  ## Data Representation�� ���R O Tensors are represented in **row-major order** for compatibility with standard���R O mathematical libraries. Shape is defined as a vector of dimensions, supporting���J G multi-dimensional arrays (though currently restricted to 2D matrices).�� ���  ## Operation Modes�� ���1 . Two patterns are provided for each operation:���Y V - **Consuming** (`+`, `-`, `*`): Take ownership, suitable for single-use computations���P M - **Borrowing** (`add()`, `sub()`, `mul()`): Borrow references, enable reuse�� ���"  ## Performance Characteristics��	 ���	[ X Operations use foundational algorithms appropriate for educational and small-scale use.���	W T GPU acceleration is available through the `cuda` feature for large-scale workloads.�4����j<�
 ����t�
 <�
 d�
 $�
 ��ql!����v4.!�����!l!l'!4.!��9!�7L!I Trait providing common element-wise mathematical operations for tensors.��!���L!I The implementing tensor type defines `MathOutput` as the concrete tensor���H!E result type (for example `CpuTensor<f64>` or `GpuTensor<f32>`). Each���K!H operation returns a `Result` so implementations can surface errors from���)!& allocation or device/kernel failures.�T�!�������ԫ,�!�ԫ׃L�!���!�׃l�!���	D��	6��	P��	B��������������������������ԫ׃���#!���	l�!��	��	��ԫ׃���.!���	��	�!��	��	
������������"!��K!H The element type of the resulting math tensor (must be floating point).�t�!����-!��:!7 The resulting tensor type returned by math operations.�T�!����6!��L!I Apply the sigmoid function element-wise and return the resulting tensor.�<�!��ԫ��������������������q�aX��	����!�
�ԫ׃$�!��2!��/!, Compute the base-10 logarithm element-wise.��!��ԫ��	��!�
�ԫ׃$�!��1!��/!, Compute the natural logarithm element-wise.��!��ԫ��	��!�
�ԫ׃$�!��2!��"! Compute the sine element-wise.��!��ԫ��	��!�
�ԫ׃$�!��	2!��	$!! Compute the cosine element-wise.��	!��ԫ��	��	!�
�ԫ׃$�	!��
2!��	%!" Compute the tangent element-wise.��
!��ԫ��	��
!�
�ԫ׃$�
!��
3!��
0!- Compute the hyperbolic tangent element-wise.�$�
!��ԫ��	��!�
�ԫ׃$�!��2!��/!, Compute the exponential (e^x) element-wise.��!��ԫ��	��!�
�ԫ׃$�!��3!��%!" Compute the maximum element-wise.�$�!��ԫ��	��!�
�ԫ׃$�!��
E!��
"! Compute the mask element-wise.���
!��ԫ��	��
!�
�ԫ׃$�
!��# ��
J G Core tensor trait exposing the minimal API required by the ML library.�� ���> ; Implementations (CPU/GPU) must provide construction, basic���H E arithmetic, reductions and device synchronization primitives used by���+ ( higher-level neural network components.�4� �������	,�
 ��� �׃<�
 ���	0��	6����������������������������������������������������
 d�
 ��ԫ��
 �
�ԫ׃$�
 ��! ��) & Returns a Tensor with all zero values�4� ���ԫ�� �
�ԫ׃�},� �� ��( % Returns a Tensor with all one values�$� ���ԫ�� �
�ԫ׃�},� ��> ��9 6 Creates a new tensor with the provided shape and data�� ��?�?��?���:�?�	�:$x��Lk�׃����������������������q�aXԫ����
�ԫ׃�},� �}$� ��! ��#   Returns the shape of the Tensor�L� ��ԫ���� �
�ԫ׃$� �� ��  Returns the data�D� ��ԫ��
�� �
�ԫ׃$� �� ��+ ( Synchronize with GPU, if running on GPU�\� ��
�ԫ׃��2 ��) & Adds two Tensors and returns a tensor�� ���ԫ�ԫ��
�� �
�ԫ׃$� �� ��2 ��% " Subtracts rhs from current tensor�� ���ԫ�ԫ��
�� �
�ԫ׃$� �� ��2 ��  Element wise multiplication�� ���ԫ�ԫ��
�� �
�ԫ׃$� �� ��$ ��1 . Transpose a 2D matrix, only supported upto 2D�� ��ԫ��
�� �
�ԫ׃$� ��5 ̔  Matrix multiplication�4� ���ԫ�ԫ��
�� �
�ԫ׃$� �� ��2 d� 	 Division�� ���ԫ�ԫ��
�� �
�ԫ׃$� �� ��3 Ķ  Element wise scaling�,� ��ԫ׃��
�� �
�ԫ׃$� ��4� ��7 ܌  Clip values to min, max�$� ��ԫ׃׃��
�� �
�ԫ׃$� �r� �r� ��% ��  Reduces rows column wise�� ��ԫ��
�� �
�ԫ׃$� L� �������������ԫ׃׃׃׃l�,��PI�"����ql/"����""�"l/"�?�"tF"�������2����U"��l�"
����h<]"�hlm"lr_min�4�"total_timeline�t�"global_i�D�"VX��<���(<�l���4���L���
$��
��
&��
��jd�|�,�\�4�L�����"����#������A> A complex number represented by real and imaginary components�����_\ This is a lightweight, copy-friendly type suitable for use in tensors and GPU computations.���	VS It implements all standard complex arithmetic operations and integrates seamlessly��
 with the tensor framework.��
���

 # Properties��
���
@= - **Copy**: Can be freely copied without performance penalty���
;8 - **DeviceCopy**: Compatible with CUDA memory transfers���A> - **Comparable**: Implements PartialEq for complex comparison���l�����<����������0- let z1 = Complex::new(3.0, 4.0);   // 3 + 4i���0- let z2 = Complex::new(1.0, 2.0);   // 1 + 2i��
���
0- let sum = z1 + z2;                 // 4 + 6i���
2/ let product = z1 * z2;             // -5 + 10i�<���	<���9W�g���L�$���t�L���(������_�(���������^�^��^��[�^���[����e�S�������
�,���H����H�������H������������
�L��f ����(�������(����������
�,�P�������P�������������������������;t��������
�T���y�H�
8�yyH�H�������H��������������������������q�aX�
��
����������
���
�
��
�__serializer����]y�X�
8�]y]yX�X���j�������02X����������������������q�aX��ӵ
�j��������ӵ
��ӵ
�j�
��jӵ
__deserializer����X��fimp8�{$�)�����pA�^����������j�o����������������������������������X������8��$�)��6�l�c���NP����X���j������������������TVX�����X���������^�^��^��[�^���[����e�S�������
��j�__formatter��X�����������������������q�aX���j��{��{�������
��F��
�
��j��
�__value����X�������
��{������
\��
b
��j��
vݽ
}�X�����…��
��{������
^��
d
��j��
xݽ
��X���j�������,.X�ӵ
��������������������q�aX����
�����۶
��
�
��jӵ
��
���X��<?CF8�Q$�)�j����
 5p�BJ���^`bd�������Rҹ��^=x�����������Rҹ��^=x�jX���j���������������IKX�����X���������^�^��^��[�^���[����e�S�������
��j���
�X����|��������������������q�aX���j���
�j���|�������
����
�j�
��j��
�__seq����X�����
��������������������q�aX��
��
�j���|�����
����
�j�
��j��
�__map�����y�$'+.8�9�y�y
޴�� ���} The `CpuTensor` structure is the backend implementaion of the `Tensor` trait. The implementation uses CPU for calcualations.���ZW Although, Auto Vectorization has been used whereever possible for parallel execeution.���t� # Examples���\�����"�������� // Create a 2x2 matrix���B? let a = CpuTensor::new(vec![2, 2], vec![1, 2, 3, 4]).unwrap();���B? let b = CpuTensor::new(vec![2, 2], vec![5, 6, 7, 8]).unwrap();�����'$ // Borrowing method (non-consuming)��� let c = a.add(&b).unwrap();�����%" // Both a and b can still be used��� let d = a.mul(&b).unwrap();�<���L��������<���C�nn�}��')|�,�3���d�$�3��ͯ(!���������_��7�<�����_�)+(!���������^�^��^��[�^���[����e�S�����!��
���,���H"���������<���H"�������������;�<������-/H"����������"��
���L��k(#�����������7�<������)+(#��������#��
���,�����OL Global application context with training configuration and GPU capabilities���d�	 # Fields�����)����,Ǫ��*����	6����	.���
K����
D����Oƭ��K����F���
v����
�����\���4Ʋ��9����T���Q�Q7|x���������������������ԎD���޴��<�����L�������l���|�4�����\�����L�����������������T�����$�������<�����"d�������d�������d���|�4�����\�����4�����\�������\���įd�����(>������_�(>���������^�^��^��[�^���[����e�S�����>��
�,�����Tl�����ស@�����#l�������.4����?�?��?���:�?�	�:$x��Lk�������(�������_�(����������^�^��^��[�^���[����e�S��������
�,���~�H��	8�~~�H��H��������H�������
��
���������
_��
e
��
s��
z|~R~�X��	8�R~R~�X��X����j�������13X��ӵ
��������������������q�aX����
�����۶
��
�
��jӵ
��
���X���9<@C8�N%�*�����G������������l�q����������������������������������������X���svz}8��%�*���_��&��O�PR�����X����j�	�	���	�	�	�	�	������	�	�	�	UWX������X����������^�^��^��[�^���[����e�S��������
�	�j���
�X������������������������q�aX���j���
��{�	�	���
���
�
�	�j��
�ݽ
���X��������
��{�	�	�����
^��
d
�	�j��
xݽ
��X������…��
��{�	�	�����
`��
f
�	�j��
zݽ
���X����j�	�	���	��	-/X��ӵ
��������������������q�aX����
�	��	�	�	۶
��
�
�	�jӵ
��
���X���	8�%�*��j�	�	�����a�U��	�	`bdf��	�	�����Rҹ��^=x������	�	��
X����j�	�	���	�	�	�	�����	�	�	JLX���	�	��X����������^�^��^��[�^���[����e�S�����	���	
�	�j���
�X������
��������������������q�aX���j���
�	�|�	�	�	��
���
�
�	�j��
���
���X������
��������������������q�aX��
��
�	�|�	�	�	��
���
�
�	�j��
���
����~�~
�
�
�
8��
�~�~���
(����2�	�	����_��8��l����	�_�	)+(����������^�^��^��[�^���[����e�S�����	���	
�	��,�����X��	8����X��X����j�	�2�	�	�	�����l����	��	PR!X�����������������������q�aX����
�j��	��	�	�	����
����
�j�
�	�j����
��
���X�������8��%�*����ջ���)�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�����	�	������	�	�������	�	��
��	�	��2�8��	�	��OR��	�	��z����	�	������	�	�������	�	������	�	��
���	�	��'*��	�	��R�X��	�	��or��	�	�������	�	������	�	��X���ruy|8��%�*����}6	4��I�	PR��	�	��X����j�	�	���	�	�	�	�	������	�	�	�	UWX���	�	��X����������^�^��^��[�^���[����e�S�����	���	
�	�j���
�X������������������������q�aX���j���
�	�{�	�	�	��
���
�
�	�j��
�ݽ
���X���������	�{�	�	���	��
^��
d
�	�j��
xݽ
��X������…���	�{�	�	���	��
`��
f
�	�j��
zݽ
���X����j�	�	���	��	-/X��ӵ
��������������������q�aX����
�	��	�	�	۶
��
�
�	�jӵ
��
���X���				8�	%�*��j�	�2�	�	�	�����l���4��-6�	�	��+-����	�	�����Rҹ��^=x������	�	��
X����j�	�2�	�	�	�����l����	�	�	�	�����	�	�	ik<>X���	�	��X����������^�^��^��[�^���[����e�S�����	���	
�	�j�����
�X�����|��������������������q�aX���j�ݓ�j��	�|�	�	�	��ݓ��ݓ�j�
�	�j��ݓ���
���X����ݓ��������������������q�aX��ݓ�j��	�|�	�	�	���ݓ�j�
�	�j��ݓ���
�����&
)
-
0
8�;
�����
x��H��	8�x�x��H��H����2�	�	�����l����	��	H���������������������������q�aX�������	��	�	���	���������
�	�������
���(����2�	�	������8��l����	��	)+(���������	���	
�	��,�����:7 Dataset container for single-precision (f32) examples.�����DA Holds training and test matrices as flattened vectors along with���?< their dimensions. This is the primary structure used by the���96 CLI runners and model loaders for f32-based datasets.��,���8bound�,��7�����$��2�	�	�����l����������	�	�	�	�	�	�	13T���	�	T���	�	l���	�	�?�?��?���:�?�	�:$x��Lk�����l���	�	��|�4��	�	��4��	�	����4��	�	����V\�����03�nq��	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	�	4��� Linear Regression�V#�	�	��79�	�	��D��� Logistic Regression�V%�	�	��9;�	�	��L�� Neural Network - Generic�V*�	�	��>@�	�	��d��� Neural Network - XOR�V&�	�	��:<�	�	��t�	�� Neural Network - Image�V(�	�	��<>�	�	��,�	��	 N Gram Generator�V"�	�	��68�	�	��\�	��	 Transformer Generator�V'�	�	��;=�	�	�� �����(������	��	(���������	���	
�	,�H�����H������	��	H�����������	���	
�	L��h������	��	�����	8�$&�����	���	
�	�P������	��	P������������
�	���	
�	T��j������
��
�������������	���	
�
��jH������
�
CH�
�
H���h
���
�h�
�
�

�
�hQSH���
��������������������;t�����
PossibleValue���
��help���aliases������ڻ�>6�
��

�
���(������
�_�
(����������^�^��^��[�^���[����e�S�����
���

�
,���0��
���0��
����
�
34�
�
0��
�
��x#��
��	long_flag���
short_flag���display_name���bin_name���author������long_version���about���
long_about���before_help���before_long_help���
after_help���after_long_help�������short_flag_aliases���long_flag_aliases���	usage_str���
usage_name���help_str���disp_ord���template���settings���
g_settings������subcommands���groups���current_help_heading���current_disp_ord���subcommand_value_name���subcommand_heading���external_value_parser���long_help_exists���deferred���app_ext��BNOe���
]�

�
jm0��
�
���
0�

�
<>0��
����
�
�
�
6789�
�
�
�
0��
����
ArgMatches��
valid_args��valid_subcommands����
subcommand��b��������������������������q�aX����������phantom��~�3��Fk����
RichFormatter�(.�5���
��
�

�
__clap_arg_matches��0��
�������
��
�

�
��R4��
���
���
���
�
�
�
�$��
���
���
���
�
�
�
¿\��
���
���
���
�
�
�
¿$�
�
���
���
���
�
�
�
¿�
�
���
���
���
�
�
�
¿��
���
���
���
�
�
�
¿4��
���
���
���
�
�
�
¿$��
���
���
���
�
�
�
¿��
���
���
���
�
�
�
¿,��
���
���
���
�
�
�
¿��
���
���
���
�
�
�
¿4��
���
���
���
�
�
�
¿$��
���
���
���
�
�
�
¿��
���
���
���
�
�
�
¿��
���
���
���
�
�
�
¿$��
���
���
���
�
�
�
¿4��
���
���
���
�
�
�
¿��
���
���
���
�
�
�
¿0��
����������������������������q�aX��
��
�

�
����0��
�����������
��
�

�
b��i4��
���
���
���
�
�
�
¿$��
���
���
���
�
�
�
¿\��
���
���
���
�
�
�
¿$�
�
���
���
���
�
�
�
¿�
�
���
���
���
�
�
�
¿��
���
���
���
�
�
�
¿4��
���
���
���
�
�
�
¿$��
���
���
���
�
�
�
¿��
���
���
���
�
�
�
¿,��
���
���
���
�
�
�
¿��
���
���
���
�
�
�
¿4��
���
���
���
�
�
�
¿$��
���
���
���
�
�
�
¿��
���
���
���
�
�
�
¿��
���
���
���
�
�
�
¿$��
���
���
���
�
�
�
¿4��
���
���
���
�
�
�
¿��
���
���
���
�
�
�
¿0��
����
�
�
;<=�
�
�
0��
����������������;t����"�"�"Id��"���
���A��
�

�
�
�����
�

�

__clap_app����
�����
��

�
����������	����	����	����	����	����	����	����	����	����	����	����	����	����	����	����	����	����	����	����	����	����	����	����	����	����	����	����	���	���	���	���	���	���	���	���	��
��<�
�
�
8�
$�
�
7
Iron Learn�d�
��
��<�
�
�
8�
$�
�
7A Rust Machine Learning Library���
!��
4�l�
��	4���
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
��arg����8long�$�$�8short�,�$�8
default_value�l��7�cd���
1$��
�
��l������8��$�$�8��,�$�8��l��7<���,��
�
�������	8��$�$�8��,��7���$�8��l��7
neural-net�d���7$��
�
����
�����
8��$�$�8��,�$�8��l��
7<�
��,<�
�
�
\�
���
�
�
8��$�
$�
8��,�
$�
8��l�
�
70.01�4�
��
+�
�
�
|����
�
�8��$�
$�
8��,�$�8��l��710001�<���
,4��
�
�������8��$�$�8��,�$�8��l��7data/neural_net.json�����;L��
�
���������8��$�$�8��,�$�8��l��7<���,L��
�
����8��$�$�8��,�$�8��l��7����(|��
�
�������8��$�$�8��,�$�8��l��71000�4���+���
�
�������8��$�$�8��,�$�8��l��7����(T��
�
�������	8��$�$�8��,��7�2�$�8��l��7�D���3d��
�
���������8��$�$�8��,�$�8��l��7<���,d��
�
�������8��$�$�8��l��7����!L��
�
�������8��$�$�8��,�$�8��l��7����(\��
�
�������8��$�$�8��l��7<���%4��
�
�������8��$�$�8��l��7���� \��
�
���������8��$�$�8��l��7����!\��
�
��Xl�����"�w�&��
�
�
�
|�T���
�
Ԯ$���
�
����$���
�
��������.>�$���|�T���
�
(������
�_�
(����������^�^��^��[�^���[����e�S�����
���

�
,���v��H��	8�v�v��H��H��������H�������
��
�
������
��
_��
e
��
s��
z|~���X��	8������X��X����j�������13X��ӵ
��������������������q�aX����
�����۶
��
�
��jӵ
��
���X���9<@C8�N%�*�����k�i�k���������������������������������������������������),�����T�Z�����qt��������������������X��� $'8�2%�*�����R�_�PR�����X����j������������������UWX������X����������^�^��^��[�^���[����e�S��������
��j���
�X������������������������q�aX���j���
��{�����
���
�
��j��
�ݽ
���X����������{�������
^��
d
��j��
xݽ
��X������…����{�������
`��
f
��j��
zݽ
���X����j�������-/X��ӵ
��������������������q�aX����
�����۶
��
�
��jӵ
��
���X�������8��%�*��j����떷����`bdf��������Rҹ��^=x���������
X����j���������������JLX������X����������^�^��^��[�^���[����e�S��������
��j���
�X������
��������������������q�aX���j���
��|�����
���
�
��j��
���
���X������
��������������������q�aX����
��|�����
���
�
��j��
���
���
��(+/28�=
�
����
̲������vc�m�<������������������������������������������(�������_�(����������^�^��^��[�^���[����e�S��������
�,���V��H��	8�V�V��H��H��������H�������
��
���������
_��
e
��
s��
z|~���X��	8������X��X����j�������13X��ӵ
��������������������q�aX����
�����۶
��
�
��jӵ
��
���X���9<@C8�N%�*����X:�/�j���������l�q����������������������������������������X���svz}8��%�*������F��]A�PR�����X����j������������������UWX������X����������^�^��^��[�^���[����e�S��������
��j���
�X������������������������q�aX���j���
��{�����
���
�
��j��
�ݽ
���X����������{�������
^��
d
��j��
xݽ
��X������…����{�������
`��
f
��j��
zݽ
���X����j�������-/X��ӵ
��������������������q�aX����
�����۶
��
�
��jӵ
��
���X���	8�%�*��j����Ri�Q�U|V��`bdf��������Rҹ��^=x���������
X����j������������?AX������X����������^�^��^��[�^���[����e�S��������
��j���
�X������
��������������������q�aX���j���
�j���|�����
����
�j�
��j��
�__data�������	�	�	�	8��	�����
(��������(������������
�,�(����2�������
0��l�����_�!#(����������^�^��^��[�^���[����e�S��������
���,���*��H��	8�*�*��H��H����2�������l������H�������������������`��f
�����x��
��t��X��	8�t�t��X��X����j��2��������l������PR!X����
��������������������q�aX����
�������
���
�
��j����
��
���X���jmqt8�%�*���Z������������������������������������������������������������58�����`�f�����}�����������������������������
�����X�������8��%�*����Ǚ���D�PR�����X����j������������������UWX������X����������^�^��^��[�^���[����e�S��������
��j���
�X������������������������q�aX���j���
��{�����
���
�
��j��
�ݽ
���X���������{�������
^��
d
��j��
xݽ
��X������…���{�������
`��
f
��j��
zݽ
���X����j�������-/X��ӵ
��������������������q�aX����
�����۶
��
�
��jӵ
��
���X���148;8�F%�*��j��2��������l�����8�7i�����+-����������Rҹ��^=x���������
X����j��2��������l��������������ik<>X������X����������^�^��^��[�^���[����e�S��������
��j�����
�X����ݓ��������������������q�aX���j�����|��������
��j��ݓ���
���X����ݓ��������������������q�aX������|�������
��j��ݓ���
������8�*�������
���,���8�,��7�����L��2�������l���@����������-/��T�������$�������,�����<�������,����(����2�����	��
0��l�	����_�!#(����������^�^��^��[�^���[����e�S��������
���,�����H��	8����H��H����2�����	��l�	�����H�������������������`��f
�����x��
��`��X��	8�`�`��X��X����j��2������	��l�	�����PR!X����
��������������������q�aX����
�������
���
�
��j����
��
���X���jmqt8�%�*���w6%x�µt�������������������������������������������������������>�D�����[^�����������������������������������������36�����^�d�����{~���������������������������������X�������8��%�*���(����	��PR�����X����j������������������UWX������X����������^�^��^��[�^���[����e�S��������
��j���
�X������������������������q�aX���j���
��{�����
���
�
��j��
�ݽ
���X����������{�������
^��
d
��j��
xݽ
��X������…����{�������
`��
f
��j��
zݽ
���X����j�������-/X��ӵ
��������������������q�aX����
�����۶
��
�
��jӵ
��
���X���/	2	6	9	8�D	%�*��j��2������	��l�	��V�*f��!�����+-����������Rҹ��^=x���������
X����j��2������	��l�	�������������ik<>X������X����������^�^��^��[�^���[����e�S��������
��j�����
�X����ݓ��������������������q�aX���j�����|��������
��j��ݓ���
���X����ݓ��������������������q�aX������|�������
��j��ݓ���
������



8�(
�������
����IF Metadata describing a single layer when serializing/restoring models.�����EB Stores the layer type, name, index within the network, raw weight���FC vector and its shape so layers can be reconstructed when loading a���
 saved model.��,���8�,��7�����L��2�����	��l�	��$�j���1��������35��	$�	����Ļ	|�	����	4�	���?�?��?���:�?�	�:$x��Lk�������	,�
��|�
D�
������
"d�
������
#\�
���?�?��?���:�?�	�:$x��Lk���������
,�
��������IF Enum describing available activation types used by `ActivationLayer`.��L�����r,�0���������
�
�
�
�
�
�
�
�����
�
�
�
<����������$����������4��������������������$����������<����������L����������\����������(������
�_�
(����������^�^��^��[�^���[����e�S�����
���

�
,���(������
��
(���������
���

�
,�&��H��	8�&�&��H��H������
��
H�������
��
�
��
�
���
��
_��
e
�
�
s��
z|~p��X��	8�p�p��X��X����j�
�
���
��
13X��ӵ
��������������������q�aX����
�
��
�
�
۶
��
�
�
�jӵ
��
���X���9<@C8�N%�*���ln�~>��
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�����
�
������
�
�������
�
��
��
�
��2�8��
�
��OR��
�
��z����
�
������
�
�������
�
������
�
��
���
�
��'*��
�
��R�X��
�
��or��
�
�������
�
������
�
��X���"%8�0%�*���ma�`�+��
PR��
�
��X����j�
�
���
�
�
�
�
������
�
�
�
UWX���
�
��X����������^�^��^��[�^���[����e�S�����
���

�
�j���
�X������������������������q�aX���j���
�
�{�
�
�
��
���
�
�
�j��
�ݽ
���X������Ճ
�
�{�
�
���
��
^��
d
�
�j��
xݽ
��X������…Ճ
�
�{�
�
���
��
`��
f
�
�j��
zݽ
���X����j�
�
���
��
-/X��ӵ
��������������������q�aX����
�
��
�
�
۶
��
�
�
�jӵ
��
���X�������8��%�*��j�
�
�����{�+J�
�
`bdf��
�
�����Rҹ��^=x������
�
��
X����j�
�
���
�
�
����
�
?AX���
�
��X����������^�^��^��[�^���[����e�S�����
���

�
�j���
�X������
��������������������q�aX���j����
�|�
�
�
��
���
�
�j��
���������NQUX8�c�������
��	��	0- Weight initialization distribution selector.����	��a��`�h�
�
�
�
�
�
�
�
�
�
�
�
4�
��
�
���
�
��4�
��
�
���
�
��<�
��
�
���
�
���
��
�
���
�
��(��	����
�_�
(��	��������^�^��^��[�^���[����e�S�����
��	�

�
,�	��(��	����
��
(��	�������
��	�

�
,�	����	�	�	�#�)�/�5L�;�A�G�M�S�Y�_�#e�'k�,q�/w�0}�4��4��8��8��A��A��D��r��t��u��v��y��y��{��{��|��|��~�����π�ۀ�Ղ„��#��+��3�;̈C��K��S��[��c�
j�
q�
x��������������������������)��)��9��e��!��9��9�@�H�H�I �L'P-�4�;�B�II�JP�hW�^�	e�	l�s�z�
�������������������������� ��.��0���������
�
�
�"�)�0�7�>�E�L�S�Z�$a�'h�'o�;v�;}�M��O��O��W��X��Y��Y��e��f�ȁ�߁��������������������²۲���
#�*�1�8�?�F�	M�T�[�b�i�p�w�~���!����������������������������������&�'
�+�.�/�/&�1-�24�6;�B�I�P�W�^�e�l�s�z�����0��8��>��>��@��������������������������� 
�"�#�%"�%)�(0�(7�*>�+E�-L�-S�0Z�0a�2h�3o�5v�5}�8��8��<��=��C��C��C��C��D��D��D��D��D��E��E��E��F��F��H�H	�H�I�I�J%�J,�K3�K:�LA�MH�MO�NV�N]�Od�Ok�Pr�Py�Q��Q�\����!��!��!��!��	!��
!��!��!��!��
!��
 �� �� �� �� �� � � � �  � '� .� 5� <� C� J� Q� X� _�gl(�t�|�����������������"�ٸ�!���(!��"���#��>��	(>�
	��			(��!	��*	��3		8	ՠ>	C	H	M	#R	�X	��a		f	(��o	��x		}	S��	�	�	�	#�	m��	���	���	���	���		�	���	���		�	���		�	���	���		
(��
��

	

#
(
-
��6
	;
(��D
��M
��V
	[
|Xa
f
k
p
#u
�X{
���
	�
(���
���
���
	�
�J�
�
�
�
#�
�J�
���
���
	�
(���
���
���
	^>#x> ��)	.(��7��@��I	N/TY^c#h9/n��w	|(������������	�
����#�$���	�	�(��	���	� ?`��������License: MIT�#https://opensource.org/licenses/MIT�codecov�Examples�model_outputs/image/images�)https://codecov.io/gh/Palash90/iron_learn�Image Reconstruction���
��
��
�
��
Ӭ
���
�
�
��
��
��
Ӭ
��
real	imaginary	
loss_function
layersmnxym_testx_testy_test
vocab_size
stoiitos
multiplier
MeanSquaredErrorBinaryCrossEntropyCategoricalCrossEntropy
layer_type
nameindexweightsshapeparameter_countepochsaved_lrloss_fn_typeepoch_errorlabelSigmoidTanhLinearSinReLUSoftmax	Embedding	Transformer��
��
��
��
��
��
î
ˮ
Ӯ
�
��
��
��
��
��
��
ɯ
�
��
��
��
��
��
°
ذ
�
�
��
��
��
��
��
ʱ
Ա
߱
��
��
�`?&�X�6�������ۜ�X��i%�P_0FZ�^U�樄��@��T��%VQQvF]!d�2�:�n4Rt��r#�b�=�F��ET���vf�A(e{?·�V>==��a��XB�E�$e�ۨI�܈�C/Y߾����;g�*�O��{����g '�\^x�;٣��7�h^�X�y�ii�G�i�d�Y#�-����)�v�M�%Z`{/Q
d��e0���#nȂ�Iv\���D�F�Od1�a�1�7���*�7��d���ӱ�q���®a�����}ǰ����Y)˚�}'ډo$qk"f��qb��l]�ej����WJ&�I:�*�td�$zhY]N���g�
�Z�8e���H�����	�U������)�z�t:�w�x��
v=7ȓG��|�y������}!dh��(F9�S�+.��ꂲ�
;��@P�T�Q���Õ�������qL0g�k�������3y��Ӆ@v6F*rWC��٧��(�Kp*Aj2�Ң��dk�W?d�'"���{Z�/.m*P{��"�,��M�������<��4;�A6�q�O
�F����&����<��,y�K]��]�P���qv��Z�����y+��4bd���UVưw��e���V���i""��Z��9�*��.���<.�'jS~N���f��:Н���~�a	I�>C�R�\��oB��U<�y��ё"�VDA�v���A^��k�,���|��Z1{��"���܁O�%w�%�@�W�������~�O��ȃXm����!��a��):��Ƙ�,x��4����_t��A�\�εޅG�:p77q��ȰvT�b�6��L��J�<��D-|:ǎ[��q[�|�׫�&9+�
9F9�C��w3m��}PP?'�-Yظ�O���\�g�yQ��d9w̟X����U�O�,��ҌӉ�)��U/����rw/>��w�z�=pvP�V��a&����0`�:�j������x(�4�$���tɼ��VyP�"a�e��Z9
�en�!gL�k����-s_P���8{�K�X����h�\���T��w�j4<��8F,c����m���'�ݧ�ަ@�z���A؞�J��4O�*a�$�k�zH�9g(D@}kv�ޞ	@c����0Q����(��͊A���F(�P7P*[�8��4�bpE�#��T����,{p:�h������v2��E�%��է��˽!��T��>������o�#<c���zLkm�8rr��8��8?R@�f������C��S]O��
���ӕ�q?�x���砒iT�M	5�xB��6&ZŹԖ
���l�z�\��=lql���-o����<�����������7c;�H��i2�b˭	�����t���5�ܱ�n.�y����.��&�	;��|y��A*D�Ńc���&gt��^�<���7���H2��Fb:�G�h�<W*Lo�gkx뮶��G�%�~h�)|?���R�D��Dh�@J�h�@: ��w/K'S��[e�0�N��n�"j�%����a��p�'�
��|��4�,�֢���X���K�Lj7�/h	v�D��D#_���P�[�vQ��)�[�
�q�����ڪ`E�ɶ��m�Fv�J�9ã�.�x܆p����Ub8�M7�����|���&XQ�Lq^��z_����"�e=g��NtIgs�۸��=�"�e���HR[�8}$�3�I���ɩ��
(���+�����)Z�c�Q\,aq!�<��h��=�ۡ<��ܨ���
�1����'��Z�J"�2L@}U�^��Jމ�
b���iB0�̍���"�%#
��™}��6�(�(<"���v�.Or�$��LL��Q��ڛ.������V���˺���$�"r�D���s�h����;�a��Q`��-�1�d�:��V�����BS�.��[|��c�5�n�ž?/��A�H)+���o�Mu��5�=���˜4!M&�'HJ�3s8��9���p$���c���ۋ�n��<�������3���Ű�'�4��I���Juqh��.4:_����m�������k�d��A�h�6�}
�r-@��R�	�u���T�
�W��	X���ig;�1�ț�۸��֯UB��h�Wx�j����Ď�r��8��ܦ`qb�5�"B�|�V �(�][�p9�	���I��>�~''��ùB�}�Q9�w� N��h��=�:δ����7A��׽�B�h[�l�^|W�M�M�b��o�kC�t�z%�<c6���E�eX;}
�y͉d�{�J��,�A�S���
��	.0����4������c��j�).��
Ѩ�@׏�t�u�
��E�e�98
����H���V��_�z�dvC	w�	��>���q�{�vP�Ą������$�Ǥ.��޸qR������Pz��@}X����'��1�+p����Y�@����p��X�2�INՆ@��&
V��Q��b�I�IR�����u��b��^�v���I�U��>2X�X .�K�KnD �0��D��Xp�3�LKo��e7�#��wLpP� �ϻ���#]r	N�И��l�hM/eJu@�Ѷ����6��N�)�#�Ն��
W���S��=`����
��h�Zp�/*Q����-��m�[Lڬ�>��SE^��@W�;F��,�����'-_�-���}�#P7�$[
(茀,B�Ռ���d�O�|�,e�蔢�|c����3�&���ko��,�:{)�Փm+��F��{#I�؋�F���Ud(N����Д�H��V*���w=&պ$�2�|�CrO}۬��!d�YSD�D@aBJ�Y�Q2~��&��J�M�zM7X��S�� P�^�ꬮ3~ӻD�|�'t��[F�$WHO��IG"��<�� �>�9<16'�]y�J"�
���?���J;t��i�M���W��!�VD���"%�"觤<���kK[|�0�Owc�hU�!w���~\�kip�����C�`:q%(��%�X@��3�b�a�����}���MxB�iݚtS�X+�&I��-Lg�k�7�j�W�N��g�M@,�O�Q�N���JhI�ˈ�k��&��Eل*�����:�a�3��z�������: ��џ��Y`S2��PJ�8���S4O����bZ�N��s�a�Țd3��E��C4�Q�Ү�/���*�!l[�	]E��Y�K���
J<�VS�g���˗M�n@��!	A��ԭ?%�4ҌO�fV��}���H��x�b��k��zB�"k/B;���fw��cJ�JtzhY�$�<�b;0�H�*@�HZյc�ᬭ�T�To�E~W�����@oa�ƫ~Ԛ�yq��d��d}�����,�%H4�{q�KD8*v]����{�٣���o���--�.�/V�Wu����zL=v���w��j[q�eҫ����*��~!�I��Wd�گ��%a^�����Y��!���9��[	,|�,�VC������������E�춠�-�7�
�"���☋>����\97�D�LjOT��0��WҡmnR�c7QV��J��h��L��H��J���cZ�����tS��D�:!��v5�.���=�\��ri8,H]B��g�uhX"}B���CI 3���j|��`�Ddp��[Ȣ
�����y���+ضh��8F��}.2�
8t,��s$>�ެ�]*���m=h�JK&���=��Æꈳ��%�)�7���4s��:.��S�_�M�>9�u��:��3����z��9��-	�S}��Lx�K�Tٗ
<��[()7�3s�rLc3�G9:>�����X��Љ	���2
���ͫm8�ĻK�=��L�'��K����i]+�dڮ�����ei`[��"����5k���AE�˭�4E�Bn^;0�D��OW�����\ ����?�S,��Q�7�8�6U�d�K���й���P\���S��ʈ�G�=��5�C��u�G�i!��V���t�v��X֦����V�*1[������:]�r)��7�9�&�1�w��=�-�^2F`Û�@�`[q�VK���Cp��R�fn[�F��'����y.�vs���Y�J�QUh㈓u���Ŏ:��;6�|�����),������M�c� ����Z+׉.C DG��T��4���`8�x�+c�#�����7k6�m�(�l��B����v
{ت���!ǵ}�@�`X�����G-���ك��},��0�����]X1Д����}��υR���hm���GI����7�F<KHD��I_��Ļ �T<mYL��4RM����u�|m#�q=��� g�h^`;�oq�˯;�B�1b��Q���N�>ؐD_��c˟?��a�n�W|^J�����>���J���N0b*�逇3�:�k��&���cO{�E/Jy���)$]�O��Ü���9`mV�{Zț�r	9�,�~���P�:�'�� mPR���!]�6$Ys[@�<NU���r_��Q�P�K{�>q�MY庐���>�����O�+ݭ<}�����b<
QO	��0i��l�Ͱ'O�m��M�L��}w~w�T�S�`�Ze���;�
k6��h�7����Ta���w+�K��YU
�����W(�C(�����v����F�0�ヸ���F�����t_�`�v��ks��R;b�K-��7ԦnkÉ�pģ��wg҇X�(h�0��mPY��c8-�憞��J|�e�.R�����Ҿ}�,���(�=�Y���&�E���M.t�a��
�ᵥӟkC�B1�O�%��:��2]Q805�NP#��������n����|�B&�:A�8fU�Ԗ&�C���uA�ѧ���b`,��c	Q�Y�ʇ[�!���.�9���Or%���[e���5(�aƻw�P�<�[*
���W���nC��2[�s�Ҋ��?��<�o�l���Vo/�����(ߗ��G3�U�6bYnR7Tb�����,��+�ۋւEqb~@^{�M{�����}�o�%��,�|枆�G����l��8f�ց�sl~�ETdSI��=�r1{�\��+79� �uA�n�
1!��9�������?9�(�#C�*2��?�U��y�~�V㍁"���S!P�\��2�#��8�BSr���3eg���wV/�L}z͓>y6Scˎ��{:b��|�;ǹc�>u�UV��*�5	�U3���抣 �𑪋;h��F(�E?$첢�(V[�'@o����n��.�zď����gn���V/�\������KnHݔ���L
�齩��LW�1�
�#–!���4誧'u�dr�
'��(]K^��Rj{��~�6����Mp�G>9p��2��Q���.��mN���f�T�5��]�L�b�($SZ���7��|y^��ìG�
�hd��'c"W�s@�7�G��0�
\M&��V����fU�C�7�!,�ň�[�skJn	�U��'�2������s/�aN�U����ow�i\ɥ�(��f��:�_���@��Lֺ1��zC:>�n�J�@����҂q%Wf�X�� ���ߥr��/迌�jU �Ҹc�b�oLm#���.�T`Q���%�Dl��VT���?J颸���e�һ�ؕ`z}����!Z@�s�B�e�G0>���3S�v	[���J}��H����{���a�o��L��0���-I��% V�‘�$��w:=�	�/��e�/��y���(�q�W��ː`�9���^#o�e�T���d��a��mkpS��qe/�z�B�M�.���y{Gs�k�-��Rgҝqt���N_�?��G�iͷ9�Sžn�nʓ��*ˤ�{�x����QL� E'�J'�;��Zn�HW�:M5���8u_Æ�N�gC�m«Ԭv��|��f�b�fZ����H�<��@��<T�
��8��g)W��HL/R3�AK���J4@\�	50��ݬ�
�V�rQY-����i2
��@׵ر8*���nZ�h~B�{�/��p�OY�^l!!zb���
�y`�#��D[�_�J
U#���_y�]��E�~�.�@M�ҽ�IyjRӃ�42�+���x9���P��&��nª~	��wvJ����i״�bE1�
�.)���v�=�SB�ȓ��[��h�s�C��̆G�O1 �`���'/?�s���ـ��ݦ�E=Y��U���F{�h����Z���C�c���7kEW��U�,<nR��>��Nm	D�A����{ZR1���ɴ��l�V�ہ:��1��+�x.|���.����� ex���b;�l���3�l�?AI�<�=;��p����É$tL+|}T�O��q�H@�S�-�U)����x��,+�b�y��[�T�0ųJ����_�x�Ї����=W0�E����U2��M,��~�B	��x�	��
�Y1�`��7��̚;�:�����2eQ8#�C&?Ի�X���:�3�ha�	�Ǎ�Y8���l#�_�8�-9)<0P+'����_ps��_�5n����<e���|O'�u&0="�9���BwU��X,�,�k��M4���lSrO�h��"�jK>��L�
@����:����F��X������ϧ+�����h!����E�O4��kJsr�G���_\;N�dΊ,��B�e�� ���:K0\�Q
y"�aݍ�1����X,�(ȿ6~�t"������lJ�CJa�r���.�[���s\��<�-�b1�/L�F�����y|\Ujph�VP����}-��N��(���E�D�"A��B� :��}�<p�G����Ӆ�t���q�ՓmO����WS�VY���8�pՂ{WE�ⲋ.����'��%	8���|O��2A�]���'������S�����N��
a'��(*x	xP��Q
 s�Z��+�ؽ�/`R����v���T�\�n�/�n�իUI�
eUN���F�;�������gH�j�b�Xգ�i�0��!>��C����D���`#��֌�%���?�wm��R�t��w��1��	��z��58kj�[��ϡ�0���*��{�M��L������W�>�Z1D�}M�O���5񵝳ŵ��V|s�4�nH�"�A�$o��$���r���S�~%�xH�^����}��X�<��1b�V~^\��@lj�sn@�J���)x�R�y�ʮ������� �ajaZI��}�M��_�b��	���HxR�gf�-�H�S&���؊$0|��v{��`�؎f�E��K����;�	�X!<r�\CYb;)Zc�Ҧ�˼�Y�z�߰^#ƿ�Iu�B*Js1��~t��s�a���\�h2MR��Dz���@R��b
�1�/�����;�™4W����uv�
(����.N��L4������`ϣJ��Go‘�L�tt���~@⊆Z���.�?g,��)җ�ćd������b���%�{X�b���_��25��5V��ƪ�/I�G��T^��M ���^
d��%$��85���|�k)���q,�
�(�i�~�jG�.��eV��?s�5�Fppd!�a_.�g��Kj8��1Lϱ�ɾ�K%��^>���6�r�Ƹm=����94�k�ϘR���SP��Rc`d��N�۟!�0v�2��GIa��?0�f�;F}�8!�5�JC�T�}������\
Aqq��~n!dDIx2S�A-�)������Xh!����Ϟ�N��d�Q�I6iI��[�M��Q���-��h���7,{�D���Sh�ڪz��z+t達��Pmj>re2�������˻�/K�@++B�� ;O��5�a��F�5�
!6Ѽc�(�t3EAE��#%��E��/jq@Ѹ&2
����[.�M[�
�AÛ��uw�n��r����0C��Gx?��l������f5��-��o�O��h/*m�5^:wQ"(��v�ލs6��0
h��Ykl�4%�\���7KWv���TO���#�.��ʎ<%�������ڋv����IW���8����A0n�����8��a�z5 ���Z�Pi�?�
025
C����y�Ӱ��C	#���NQ$�RN���|p���.�ڱJzd(���qFJ��2��Ni��sp^�bJ�Jy�n>S:�H
0�n�F�מ#Dr�>K���U�P�"F����������R@�$���筥���<�t�����OA�~��#�L��WW��l�^�'�5}���LV]Ĉ���AdT��
��/��g\~W�x�|�eX�#+����&���(�wd�f+�
��gC�)����ƈA�Un��$��uEZtd5~�
V��^A��@vC>m[T��R�ޣ]h�9q_K�ϏRq��QE����,��Lď�u0*1I �\g�3�$���A�,�`Com#K�v��
BoL(R�nt#)���
De�Iՙ� �-栨;�G	�8G�Q2Z�th�H�c��Q��S����I���}���W5c�g6I�Qz�Rkx�.X��s�����G�����L�\|f�ljL6�8�pH~�p����V4�_��h|$*A�;�L�>�����,�cJ aF���ބ�������@���#�3�z9�M+�jsZ/�ރ�s�x->T�E��wl3-�r��]*���`�����^�>�0�:�����oG(��+DЎ����r��y8#���p.X�]��d�r�@��4���ƥ,V��/
E������/G�n�υ�@�>x0�B,�H���#P'�5����æ�J��;���e"�:��H�����Q�k�y9F��yb��H��9?��#,�����9C/ײI�IBk���%2��O��tc	���s�.����H�n/NDG�AsWC���Ew�L21��)ͦ&��;�	�[.�z:mm��X�`�=�����g��|�������^�d��6�b�qͷ�D_X�|��ʽ����C��֠��o�ڜq�Tih���ڸ��C>@�,��E&n��d��!��L���Ǻ�����B��V]�i����0��d��Fp�]����������Pr�VP��h"��[��b9�1غ���Ţh}�_^2m��6^\?������O:����)�נ
���Ǐ��S���X���|�pMe,D��f�(��C��9�%�&��!}q;��u�j�i�T�!_�Qɉ�9ܷG-r;B���K��צ�jՓ:rwM?�qk7�}�yM�8���0���)h֎�U��ޟ����+�h�a^`��5�p���O�ח~�S��u!1m#d=���FR�2߭�ۙ\7]���0bIш{���F���;�V��5~�V��F��-�av2�]���G���!���J��)Y0��R����Ö������[>�	���ͤ���/ڸ���Y�y��a������$��!��
�F�z��&]O�VMu�s���[x��e��v�\	f\՗�ώt���g
�����7Κ}2����H�'��>�s�[_n��J�qW}e��
מ�s	h�9��1+�;��5O���l�w���Vc��N�<��V���œ��!���>YFԖu�H�\����څw]5h"��ӣ�T���2qN�����=(p����[(/&���\����v���3�w��SN��.�*ZJCv���B��(>O�E��6[�s9�?˕�\�Z�[�zQY,�$��>֊gK�n��s���\�?�"=���,���$�c>x���u���Y�������XMs�cB�Z���Ok�04���w�.~�����Y�'��9�qqv�Tm�]�����6{����'H�l��pao�D���4���=�r�87iL���^�9"�S�������L��*����q�D5)���Rv�ؙ�|�r���x�J��<6�*\M/jBEu�
�����b�E8���JX��Z�ss���Qx��ё�j����F�7]��u4���tC�,��'�y�A
�.�����]Dr�h����I�48�]eιx�����uE&�`��c5/r\9��(�A�;4����8V��B�)]%��<,R�ά!˘�hr<���'���v��Jw����0L��-�my�'ל4rk���`����eB~B\�n�i�}l�Z���}�T�,`oC��Wg�xe�������,�|ɊrJ���w�q�2��h�?����g�mVւ���)H����]O��`�R��?�u�c��v�(�zr�3Sٮ�6P������RE�
����yZ��2���A�	[|"榫�z�á\��*��\�"eX�O;�w���G���%��	��1}M�#u��{�X�0�ujG��EҴ��1>^ �/:�M���
E��q�56�ŋe�hwc�����"&����'�s�9�0��p�hRa�>S�ƫ�p�~��-p�xЬ��w�̦gR��}R�ћ�'CГ������Z�F�;1��b�m.:�6��PiY�d�>��ÍO���aiU��5L>�.�آ�������q�%۷��ڃ,̦����x���f��c7�"�VQũel�΁!����cO�����ʷ6l�%(�Dv��"v�b�G��YWT��X5��CM���nꛍ :5U�P�*R6�׀q�.:��|1��]��=VnV����+G�}�!��5�4��on�y3xM}�M�oRĿ�5�����`���dKD7�)KVD�,`Ǘ�2ks�\r
jY�5=u�
�$���ӝ��͜Tli��H	���p��N��QEP�],�U4Ja!���x[�vh�>�d>���x�8ԍ�t��>\srAX�zb���KJ�u���
R��]��ך������s�O�*�p̂��R�T���:�9��HgM��[Ly0�jd3���*�CN�e�iS�va�\���0�Ѥ&a��t{�AiWLx͍�*��a\Β��U��VOͦ�馗�UfJ4�lP�<9�	����P��
�APo����;���~rS�PG�N�P�I�6������(Z
#�:$��N*��ϓѐǃ[��\$5��e�x
��5���R��'u����[ ��:�M��ZrvQ�.r�#i�WՁF�a�f!�������V0O[>���=��1��5<d$~K	�N�k�f�W�m��.%Fk0n�P��Z�﫞d��#d3��yx�W���	��E�ŵ�~��<�m���咐��5��1�Q�W�K��ҁ�i}<m�(�L���&ߘǥLM�<�m'��g���(>e��v��Q#�;����s;(�T��/Fn��|�K�K�K?A8e���N����5�}�53̝�
�Eۑ��nV���H���,u�h�
��ӟ��1~�/LqscI�e��T��&
u��3��c�ZS���|�։�U�*6;�y��7���iQ��4���.� �7�ƒ���FΗ4O�T`��5�X��U���,��P��h(���pCt�~8���ƫEm�P��܁�ɦR�kG��yQiXI�f��4(}+�[��;��98T*��À*�w������N��ÏI�����I�XvF��@ǾR������P%���m��}b/�F*~0���("������ҕ���H~䛗Wg�������/�a�2v'g�����&�ؽԹM.舱������/�U��d�eE�A��:GP�ޔ4�b�o^%7?4��=]���1ً�\yC�;U ��Z�G�)9]��aU}�s��
��)�F���Fɮ���3]��i�!ZK�B��e��ֱ��V���=�k�G)��t��XHm,��*�^0X����-5ѻ�O(e�{�����"u��iЗ<rT��H�"��(Omԋ��zRP}Zs7_3+��eX�Y��H���x��#���R6���Ղ�D,8^5[�k���e<���P�#����
�+���|4$�89�i�<�����HQE��G��)���̢�j!�d���x?��<�^�C^�~5*��-{�r����(���V����9�l3��SԭL��:�C�]#����ִ
�?�����l�GMi(������Z�,-|�#fN�c��ƀ�����^
��0�&���x?���i	���*��]���&
o��V�����/���hW����R]��є/^>��\8��+!��|Z._�����I9Iښ�Z�!�ߚ�����T>��\퐀'�'��oeW��y`�#ﳉ��h��*�zX�1�v, V��vp��gtE���/B|bS��3M<ly>����C��xVD�w����i�Tr��u����"_�@�!s/������Nw@�#��M3��'�����ڳ8ݼ
��ri�C�K
ʓ-uv�G�CA�l�T��@f
C5+��j�ڌ6�"Հ����+@�l��iٳ�A�}����o��q�����"��k��)��+�+�>[���$���ѥ�q�R=��RÉO:#����BV(�_�J�غ�ZD�-�/熍��^�l^��q�Z��E�a\�}�.��3NZz�gI���Y
\���;����H��c����GK���0�ـ���+�1�.:9��/yԏ�h����/��L_��>8�A/'L�w�~a5Pj��g�/YQ�^P�}���X��F��y:�E]۲��;�P��Z�Z�K/o����B
Ei�X=�X��њiiʬ�⡶�!Z���˫gv��Q	�����KA�_�0��K�vsHEx��B�UЎ�8�a¥U�I���)L���؁��Ū��
#V�[ܜ��P�����n����&�����;PQl��l��r�mpMú���^w�����'`����O�x҆�I�޷-Y�|�5������8n��E��������%`q`�[ݾy_��"-����"F���ֽ},�T��5f2�-b�zDi e����Ǚи�;S�k�:��a�x��y���I���k�����7
�����Y��Y,��� c��lp�����}��E�|����x��h����f:.���0���HN
��ΩeW�׿�<� P��ԁ�"�|�
��6&b�p��<莹�K�	XX#�wK�Kׂ,ȷ���ǾEbV����hg���_ثɎ	�xTԐ���rBGƒ@/�FW�'�B3�
q�?��C�^��<��o����w���Gڑ�C@=��G����T��h�9M;Z�#6"P��3�ܓ�O�h���7�������|�����Ƽ��k������n<܄�wR4Ps@Q��LH�!G6	�<���Bu��'��;�1���n>X��P@j9\	���m:�g���w/f:��5G7�?~b�����xD�W�x?c��R��*��9�	��P
K���so=3��/����}~u�g0Q{��[P�(�Ȝm]�?��'�"g���6dU����	��u��M��� K��6����Є2���!F�L��d^�s6�8�N�����c�vs�4tfi������L��5�����;cZQ�̋�����#;��r���z�F��c�~�wR&vZ�s#�2��ƶ���I5�̌@�k�D���\�7q�T�b����I��)}�?��C��%R�7�J��%Au��a�381����*�x�A��Y�Q(��R7f�&l��ش'�����$`��U��=�g�Q�,���᥉�黵��a�
�k��@ol�Mđ�/��A�<�<��Z�W21��d��9b�Dq�!U�1_	�ˍ����0�����q&4:~]4����C�����B�D�Y%��q �ߕQ�1�RQ�����>סA�HYd����pS��/��\GLF�y�1���/���S<���0~��9=��"n,�D$��J'H
��߅�Lm��s��Ph�l��vG*�����Σ��� �D���K�PN�o�4<e��
�:��|�-��WG�t�p��ܯo_�M�5�c9Wz��^)���-�$.�uYveP~�w_��M�~�*�<�"��?���O��6k=�p.�|8�`�ͦ��F@�G���,�M�'�7Yzb麌)��Lj?��/j�dx�ي3��v���O��F}�ċ�$�͘�J�-��6	� ��c*
r:�>Z!ܟ%ѱ	��9t�#ݷ���)jc�Cs�3�_�5/�J�/��Z�H�U�M�*A�b�\W6��nZ�Ac�Ԟ;�iI�*��UW�-��hq�tz�Y������ev��F��|���YEʅ��.���?�_pM��8+m,��|X�:�U�p/�Uz�K�V� ���,`y�"��]��׿��\�������I�i�cWeq��jBu��̯�#��q���`�x$�A�9#^C����m�9N���H���hD����VU�`��Z�Z�bX��~D�w��~�C�xI A�W�a������X\W�E%�R|���iA�jH�mA���Ѡ��)��s���Z��M����ǐ���&S����cv�>�:e��Ӷ��6,����&~y;0���"���ܨ���[�]x���Ċ!�\/�W	�@��V�
��#�m��a
N�%�`N�2 �X��W���^�6�f�&��ľ����s'��;�����}lV��?C ��wZ��懢7�np�#q�G��E}���q���'W��	���:�}ɽxһf,��&;��g�K.0)Z##Ń�^N��R��Q6V�dMw��x�[� f'Q[b�:Ĕ	�M���Z)^���8:�$NڑvJ`��H�`|P�&�mS<�ߦ���%
ץ��m3w�����:��jس�FD�qz���5�Q����s����
C���g�	S�d͏�4�BT�u�=�~)W�1�a=g٧Vv!��z�-�K2��5�Obl�ꆛ�~7�:SH;�E�f�?�K#��UO:6�Ǻ��(j6+2l?�n�;|r(<s��
уsr���3�ʨ�LU7݅�^�4��Y�	���ȴ�4<G��‹v�`~E3�������L�a�d�l�c�J�eU�)�	J�N��I?f�B�y�}E܎�M�y�=��UjA��
O���?z5�q��3����UtV�ɪi�S�Vv*Ha$I�jf(�0���Ə������<|3��r�<!��r�T�O����� Ɲ����x9Z��%aӁm��>�K�@��vj���"��a�.��o�5�\8�K�<�Ph�W���݉W�b�w9"�����}vE�t�+.�����<[�Ģ�GWpN�ߠ��	����D���L�ϩʋ����e3�2����3f��Ol��R��El�2�Hw5��D
���
�D�v
����b���<��.�)��8O�C��a���r��
�B��R�XhR`����[S�]�'�����+���*/�.��$?�{�*,���X�/+�����x��?��7�_ş��=���u嬯�t��c߹o���-5�C�_�t����;�3{OT@�RvIA�%��8��-��De5S�
�G�jC��b����6bs�T�p��ހ��l�Pަ.�tsO͔�dg��qGO���Y���{T�kY��Xw�]C�Q�DK�*l�`��8��W+	K�d��N,�X]~%5��H�1����=QY}�,�{Ѐ�Z�q�g<��Ρ!W`���E�0f�/ڄ���n�n��������wˣ��:)ۀ�C!�	����rbq��!%�G_yZ��w19j��¦�Y�s��i�f��o���	0����b�6��g�S���A��.������&w�-�����(��/�c���}��q����o�y#gr�;�T~�q��yĊ����t��H�p�\[{&�W�����[�b�o�v�k�G"�����
ki��	�kJ�v�
��	�:��?kCqHsw]��c
d�ߥ$���=���#Ս��*�7�v�_� 3a�/�[�$����(5~k��B ����BP�F���Z�&�x�R�)�	uՓ��{H{%9�p��0�ʎ_��@���ޤ5PL�HV"'9�OB���A�\lo�qb��K�n��;�����S���@-�X�/}iFt5���M�������ڊTG�\��Ы���o�Q,_Io揬�~nP�B	@��n��E�T�%p�_I	`nv� �,;|5'x:P�S@e��l��T�!��ᖊ�(J��8
��y0�������V��J�CŸ���q���_�GR/~�a��:G��M��Gꣁ��û4qsK�t�Pd;�~ˀ�бyE�&�]*��kΆϝ������N��}a���6:|(K��љ�G�B�|eCi����U��4�;��r��Vo̻�o}D���|`s���uÔ�Q$�K,�7�p͆+ަ+��T}�8-���Ͷ���\x������o�]��Z���s/���^���?���>_��^�<��C�?	]�^GEɏb���;�C,�����{����c�u��a�x){3̙٥˝Ō�>БJ����&�_���U!�fOf�K���kˁ��cԅ����rtj��S�8���wkZ)��D+L�C� @�_lй"k�7jP�D��K���H}z�k�~�y��x0�{���϶�k���պ��D�QZ˥�(o�V�#_�v���0���6U!�qܭy��!��21�HE@+�n�:b���9q��!�*�*�/'��m��t-�����������}'���N�)ԏ
���n���
���(�K9u��w�B�T�m�6vB
�V/�R���u�`z��s�
��/N��Ʉ������	mtL��rP�G��G��3��o0����q���TBD�~��KZ���c��Tq��f%�b��A��
+%��\���Y�Ѷ.z��P�� ��'���dE@q�"X8s�<�Lh���R��uտ�����<wů>R�o��uLC��?$[��?���*d)��ƿ 9��@���7W�j[{Ĉ�Ͼ�:i�H,;�������*fA>�m5h��aa�����׷�����l���T�G�ظϟe��	U�j��ڎ�P����������*�x�k��ƨ�C����C�6��DSroI��ה�
�F�T����v�����s�VhA7�G2r�����3�)�/���`�+��<��W.�h��t�P��it�� �w����-���.V�^r��CZ�g]C>��Bf��{���:x�E�Ԫ��]6��譝�R��u�d��zI�{'�-��D������I��C���D��,G���wr���ȸ�c5�Ӿ�|�|�|}�6�B�F�d\|���zB�F�dh|���U�U�U�U�U�U�U�U�U�*[1<	9[	L�����S�����'�7�
�����]����������P��F�&n4�>�q�yzN�{�,',P1�1�3|5)7.9B:W:�<�<X?y?�?�AB4B�D�D�D5GXGqGlJ�J�JPLLM�M�NOYO�O�O@P�P�P'QtQ�QRpR�RjS�SToT�TUtU�U"VzV!W�WGX�X\Y�YZlZ�Z:[�[
\e\�\G]�]�]^zd�d�d�h
i(i�o�o�o?p�pwq?r�r�r~s t�tuuYv&w�w�xWyz�zM{i{�{?|�|�|S}�}~g~�~y������������Y���:������u��������+�����?�������_�N�������^����7���������=���2�����K��7���F����|�����������������$�t��������3����`�|��u�)�f���@������r���6�����������l�M������������p�%���m�M�L���%����������5����������e�:�
����]�-�������� �;�V�������z�4���\������+�G�c��������������:�V�r�����������[���q�������Y�-�L�v��}��

���a�(7<=�V�e��� =Z�\�l���t k � �!�!" "="�"`#$s$�$�%�%x&<)++E+^+x+�+�+�+�+,,�,-m-
.�.u/�12u23�3c4�4/5F5]5v5�5�5E7_7v7�78�8I9S?.C�CDD�DsE�E�F GTG�G�G)HhH�H�H-IaI�IJAJJ�JK:K�K�KLXL�L�LMcM�M�M1N�N�N�N<O�O�O
P]P�P�PQfQ�Q�Q6RjR�R�R?S~S�STCTwT�TUWU�U�UVPV�V�V0WnW�W�W)XyX�X	YGY�Y�YZRZ�Z�Z [s[�[�[+\|\�\�\L]�]�]^U^�^�^%_Y_�_�_.`m`�`Ya�a2b�b�bcTcecvc�c�c�c�c�c�c�c7e�e�e<f�f�fAg�g�gFh�hi�i�iEj�j�j5k�k�k%lul�lmem�m#nsn�noco�opSp�p�pCqwq�q�r�szXzc}�}*~.�X���j����� ���3�g���S���
������1���w����3���R���E�����f�������l������'�J�����k��������;�2������d���2�K�	������D��g�����7�P�����+�L�g���������8����X����/�I�b�{������������)�C�]�u�����������
�0����&�����Z�����C�����|���(�l���/�����X�1���O���E�������M�g��������X�
�I�����>������Y�����1�|���N�h�������F��������l���A�F�0�f�������T���t��������1�K�e���;����a���!��������/�S�����T�x����t����������������������T����b����p���$�~���2�����@�����P��u���)�����7�����E�����S����a����o������
���s��}�������������
����}���^���/�b�}������)����9�����3���x����I�����U�����~W�u�k�	%s�C�g��/S	?	c	�	(
]
"��\�.
H
�
�e�&�K������`�h����"�x�I��$����-���@~� . � �!�"�"j#�#�#�#�#�#C$�$4%�%&N&�&y')(m(�(�(D)�)�)*d*�*(+�+�+Q,*-�-H.y.>/�/	0%0�0�0t1S2"3Y3
5'5@5�5�5�5�5F6`677y7�7�7?8�8�89I9m9:A:�:�:�:{;�;�;�<X=�=�=+>s>�>?K?�?@h@�@8AB�B/C`C%D�D�D�D"E<E�E�FG�G�GHTH�H�HlI�I�*!,W169XLWN������A	�����#�3������S��
��������<
��>��&j4�>�B�F�
d~q�yzt|��L�s�������:
�?d.�'�6�<ZG&1O:�<e?B�DBGyJ~MsN{N�N�N�N�N�N�N�N�N�Q�]�d�h�o�p�z�,�f�<���g����X������7�!�"�#�
*�	,57�8�B�F�F�H�JdL=NP�Q�S�UzWSY,[]�^a`cqc�c�c�c�c�c�c�c�
d�i�m�|��^���~���!�9�����&�����������/�]��7�������������������������J�j����9�������$�,�4�<����0���,���5�U�������������������(�A���f��������������K�V��'��V�^�f�n�v�&�p���@S[cAQ	G
x����A�����NV^fnvn��)�O#$$e%�&�'�'�'�'(((('(�*C+c.�/_0�4�67777#7+737[9/:�:�;=&=.=6=>=F=N=V=�?*@JC{D�DrGzG�G�G�H~I&




((((((((((









(((&




(((&



((((((((&



(((((((

(((((&


(((

(((&




((((((&




(((((((((&


((((((((

((((((((&


((((�* ,�0<1V1�2�4$6�749n<K>}?�ABND�DG\G9J�J"LVL�M�N�NO6O]O�O�O�O�OPDPjP�P�P�PQ+QQQxQ�Q1R�R�V6W�W\X�XqY�YZ�Z�[z\�\\]^@d�dhiMo�oprTr�r2s�s�tu�u�v�w^x�x�y2zR{n{�{U|�|
}i}�}!~}~�~5�:�т�˅��o��@�������ۙ"����0���T���ª������P�����)��������0����(�x������d�����>���
��������Q���������@�������a�B�����;� ��������z�O��(�r�3�������	�$�?�Z������I���q���2���/�K�g��������������"�>�Z�v�������������������o�C�b*�[0n	\
a__
JLT�=R�kz,��$A�����# � -!�!�!"$"
##$�$
%&~&�*/+I+b+|+�+�+�+�+,",+-�-`./�/�12s34i4�425I5`5z5�5�5I7c7z7�7�8�>�@sC�C>D�DCE�E5F5GiG�G�G>H}HIBIvI�IJVJ�JKOK�K�K/L�L�L(MxM�MN�N�NOQO�O�OrP�P�P*Q{Q�QKRR�RSTS�S$TXT�T�T-UlU�U1VeV�VWEW�W
X>X�X�XY�Y�YZgZ�Z�Z�[�[�[@\�\�\a]�]�]^j^�^:_n_�_�_C`�`�abGb�b�b*cddLe�e�eQf�f�fVg�gh[h�h%i�iZj�j�jJk�k�k:l�l�l*mzm8n�n�n(oxo�ophp�pqXq}q�q�r�yz�{�}~�~{���"���C�؂c��c�|�
���9�K�͉]�Ίt��ƌD�Ѝh����K���?�j���ѕ��]�җ��ܘ�N�X���ƛ���"�L���œ4�^��
���W�.�i���9�c������P�k��K������3�M�f������ȭ����-�G�a�y�����îݮ��C���*���~�бg�ʲ����-�V�q���ܴ�����k�D�ҷ��k����O�z�0�
��k�.�����C�l����������B�_����������7�b�����P�{�1�
���Y�1�����n���T�Y�U����g��x�������5�O�k���%�^�������$�K��������F�m���f�������	�-�#������c������,���i��|���z�	�����}������h���J����5�f�������<���L���F��}��������2�O�z������;������j����u�V0%l����f$	v	
p
H����B��0
[
�x9M������
�5}���2Oz���
J��#��@�B� A � �!�"#n#�#�#�#�#V$%�%3&�&�'.(W(r(�(�(�()-)J)u)�)�)�)*"*M*j*�*�*+�+�+d,=-�-�.d/�/0�0�0�1f2G3�45+5D5�5�5�5�5J6�6<7c7~7�7�7�78)8D8k8�8�8�8�8
919�9T:�:;�;<�<]=�=�=�=�=>1>\>y>�>�>�>	?4?Q?|?�?�?j@�@KA$B�BsCKD�D�D$EOEF�F@G�G�G�G�GH>HYH�H�H�Iv�,,,#,&1L1�1�1�1�1�3�3�3]5j5w5
77$799*9	:
::::%:*:0:6:>:R:�<�<T?u?�?�AB/B}D�D�D1GTGlGhJ�J�JLLMMMMM&M,M/M5M;MAMGMM�M�N�N�NO!OGOUOnO�O�O�O�O�OP.P<PUP{P�P�P�P�P�PQ#Q<QbQpQ�Q�Q�Q
RRkR�RfS�STkT�TUpU�UVuVW�WBX�XWY�Y�YhZ�Z6[�[	\`\�\B]�]�]�]^ud�d�d�d�h�h	i#i�o�o�o�o;p�peqrq:r�r�rzst�tpuTv!w�w�xQy�y�z;{H{d{�{9|�|�|M}�}~a~�~u���������ɂp�v�}�����������ń҄߄������P�U�[�b�h�n�t�|���9�F�S�����Ɗ6�����������njό׌ߌ�����f�s���`�h�p����������������ƚϚס(�����������������:����J�P�U�Z�_�d�i�p�x�����������������������ƦӨ���Z�0�=�J�������ŬˬѬ٬ެ������
���� �%�-�5�>�G�P�Y�a�i�q�v�|�������������@�M�Z����3�����~���9���.�����H�X�_�f�n�w��������������������Ⱥкغ�������&�3���B����x�ڿ������������s�{�������M�S�Z�a�i�r�w�}�����������������������������������������������������o�����{���/����\�w��o�	��#�H�U�b���<������T�a�n���2�������������������%�.�6�>�F�O�W�_�g�.�;�H���r������a�n�{�����k����g�G�G���!����������1��������������������������������q�~���F�S�`��'�4�����	������������������
�������W���(�������������7�R�����n�{����t��"�/���W������'�C�_�{���t��������������6�R�n�����������V�������l�������:GT�'�F������er�������������y�����	

�
�
�
�
����
�
���������]�""/3�
!&,28+8�Q�`�����8U���X�g�o|��o	 f � �!�!�!�!�!"8"�"�"�"Z#�#�#
$n$�$~%�%O&T&Z&`&f&l&t&�(�(�(�(�(�(�(�(�(�())))#),)4)8)++&+A+Z+t+�+�+�+�+�+,{,�,--h-.�.o/�1�12q23�3_4�4�45,5C5Z5r5�5�577#727A7[7t7�7�7�8�8�8�8�8E94?9???E?M?$C*C�C�C{D�DnE�E�FGPG�G�G$HcH�H�H)I]I�I�I<J{J�JK6K�K�KLTL�L�LM_M�M�M-N�N�N�N8O�O�OPYP�P�PQaQ�Q�Q2RfR�R�R:SyS�ST?TsT�TURU�U�UVLV�V�V+WjW�W�W%XuX�XYCY�Y�Y�YNZ�Z�Z[o[�[�['\w\�\�\H]|]�]^P^�^�^!_U_�_�_)`h`�`Ua�a.bb�bcPcacrc�c�c�c�c�c�c�c3e�e�e8f�f�f=g�g�gBh�hi}i�iAj�j�j1k�k�k!lql�lmam�mnon�no_o�o�oOp�p�p?qsq�q�q�q�q�r�r�r�s�s�szzGzMzSzO}^}�}%~)�S�ۀe��������.�V�c���N�݇������,�ҋr�	���.���M�ΏA�x�~���#�0�8�=�C�I�Q�Y�b�k�p�v�|���������������b�|�����g����
�"�E�����h�����Ę��ə���2�6� �-�����ٛ��5�_���՜)�-�F�����t�����;�?����a�e����.�2�K���������&�;�H�c�~�Ψۨ��ũҩ&�3������T����+�E�^�w�������٭��$�?�Y�q�������ծ��+�ٯ�!�����W�������3�@�t�|�����i�v����&�A�j������)�~�����R��+�����<�I�v�z�2�?��������C�G�a����������E�R��;�C�����������<�W����������+�V�s��������.�K�v�����D�H�b������r����<�@��������������U�Y�f���;�3�@� �-�c�������������A�N���c�p��������-�G�a����7�p�������6�]��������X�������)�M�����N�r����n����������������
�t�z�����������P����^����l��� �z���.�����<�����J��q���%����3�����A�����O����]����k������������M�S�a�i�q�y����������������������������������	���!�)�1�9�A�I�Q�Y�a�i�q�y���o��y�������������	����y���Z���+�^�y�������#�����3���������)�-�����v����������F�c�������&�O�������xDQ��bo��Xe��im�=
��c~���)M�1	9	]	�	�	
"
S
W
����+V��$
(
B
�
��R_�� ��EI���������Z��e����r����v����Fc����n���
���'������-1>|��  ( � �!�!�"�"�"Y#f#�#�#�#�#�#0$=$�$&%.%q%~%�%&@&H&�&�&�&f's''(B(k(�(�(�(�()A)^)�)�)�)�)*6*a*~*�*�*"+w+{+�+K,-$-�-�-5.B.o.s.+/8/�/�/�/00�0�0�0�0n1@2M233U3�4	5#5<5�5�5�5�5B6\637N7u7�7�7�7�78;8V8}8�8�8�899C9g9:;:�:�:�:�:k;x;�;�;�;�;�<�<V=q=�=�=�=�=(>E>p>�>�>�>??H?e?�?�?	@^@b@|@2A�AB�B�BC)CVCZCDDD�D�D�DEE6E�E�F�F�F�G�G�G�GH)HPHkH�H�HfI�I�I�I�I�I�I�IJJ
JJJJ%J+J1J7J=JCJIJOJUJ[JaJgJmJsJyJJ�J�J�J�J�J�J�J�J�J�J�J�J�J�J�J�J�J�J�JKKKK K(K0K8K@KHKOKVK]KdKkKrKyK�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�KLLLL L'L.L5L<LCLJLQLXL_LfLmLtL{L�L�L�L�L�L�L�L�L�L�L�L�L�L�L�L�L�L�LMMMMM#M*M1M8M?MFMMMTM[MbMiMpMwM~M�M�M�M�M�M�M�M�M�M�M�M�M�M�M�M�MNNNNN$N+N2N9N@NGNNNUN\NcNjNqNxNN�N�N�N�N�N�N�N�N�N�N�N�N�N�N�N�N�N�NOOOO O'O.O5O<OCOJOQOXO_OfOmOtO{O�O�O�O�O�O�O�O�O�O�O�O�O�O�O�O�O�O�OPPPPP#P*P1P8P?PFPMPTP[PbPiPpPwP~P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�PQ
QQQQ&Q-Q4Q;QBQIQPQWQ^QeQlQrQyQ�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�QRRRR!R(R/R6R=RDRLRQRYRaRfRnRvR{R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�RSSSS#S(S-S2S7S=SFSKSTS]SbShSmSrSwS|S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�STT
TTT T)T2T;T@TFTKTPTUTZT`TiTnTwT�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�TUUUU%U.U3U9U>UCUHUMUSU\UaUjUsU|U�U�U�U�U�U�U�U�U�U�U�U,,�0)1R1�1�1�1�2�3�3�4_5l5677�79909:::#:.:4:::Y<6>y?�AB9D�D�FXG$J�J
LRLMMM#M)M3M9M?MEM�M�M�N�NO#O[OpO�O�O�O
PBPWP�P�P�P�P)Q>QvQ�QRRpRzV!W�WGX�X\Y�YZ�Z�[e\�\G]�]�]+d�d�djh�h
i8o�o�o�ogq�q?r�rs�sktu�u�v{wIx�x�yz={M{i{�{?|�|�|S}�}~g~�~{����%�����΂s�z������������DŽԄ��������X�_�e�k�r�x���Z�;�H������<���������Čˌӌی������h�u��d�l�j�����ƙ�������š˚��ۡ-�������������?���M�]�b�l�t�|�����������������¦��ը���2�?�����¬Ȭάլ��������#�)�1�:�C�L�U�]�e�m�z�������������B�O��M�\�c�j�s�{�����������������ĺ̺Ժܺ���������(�������������w���������P�W�^�e�n�{�����������������������������
���������������$�t������`�|�u���)�J�W���V�c��������������!�*�2�:�B�K�S�[�c���0�=�M�t�����c�p�������+�������L�-�����7�����������������������������s�����H�U�e��)�:�������������������������]���/������������ �;�V���p�}�����$�4���\�������+�G�c����v�������������:�V�r�����������������q�q����<IY�-�L�����&g���������F����Y	�	

G
�
�
L�J��J
�
�
5��7��?��s$9*06 -=�V�e(���� =����lq~��t k )!�!�!�!�!" "�"�"�"�#�#$s$�$�%X&^&d&j&p&z&�(�(�(�(�(�(�(�(�())))()0)|*++++E+^+x+�+�+�+�+,,�,--�-K.�.u/�1�12^34e4�4�4!5/5F5]5v5�5�577&757E7_7v7�7�8�8�8�8�8�>=?C?I?�@(C^C�C)D�D.E�E1F GTG�G�G)HhH�H-IaI�IJAJ�JK:K�K�KL�L�LMcM�M�M�N�N�N<O�O�O]P�P�PQfQ�Q6RjR�R�R?S~STCTwT�TUWU�UVPV�V�V0W�W�W)XyX�X	Y�Y�YZRZ�Z�Zs[�[�[+\|\�\L]�]�]^U^�^%_Y_�_�_.`m`�a�a2b�b�bc`d7e�e�e<f�f�fAg�g�gFh�hi�iEj�j�j5k�k�k%lul�lmem#nsn�noco�opSp�p�pCqyq�q�q�q�r�r�r�s�s�y
zzJzPz�{R}�}~~f���
���.�ÂN�փ_�X�g�����$�6���H���_�����/���S�ߎv�G�{�����%�4�A�G�M�U�^�g�t�z���������������;�f�������J�������ɘ����4�;�"�V�����ޛ�� �8�����+�2�K�	����v����=�D���,�c�g���0�7�P��������=�L�g�Ш�ǩ(�8��������/�I�b�{�����ĭݭ���)�C�]�u�������ٮ�0�߯�&���{�����5�d�z�����k������+�C�o���ڴ�������X� �1�����>�x���4�i������E�M�g��������G�X�+�A�����������A�Y����������.�\�v��������4�N�����F�N�h������t����>�F���/���������W�[�l���A�5�F�"�R�����������C�T��e�t��������1�K�g����\�r�����"�8���������D�Z���S��x������������w��������P�������
�P�(���e���x���v������y�������d���F����1�b�}�����)���
�9�������+�3����{���������L�f������(�������~FW��d��Z���	ks�C�	!j����S!	7	c	�	

 
U
]
F����.��&
.
H
�
��Te�&�GK������������t��
"�{���Lf����Hp�����-�����/3@~�  . � �!�!�"�"#[#j#�#�#�#�#2$C$%,%s%�%&0&F&�&�&�&h'�',(D(p(�(�(�(�()G)a)�)�)�)�)*9*g*�*�*�*y+�+�+Q,-*-�-�-7.q.y.-/b/�/�/�/	0�0�0�0�0t1B2S23D3�4�4
5'5@5�5�5�5�5F6�6:7P7|7�7�7�788B8X8�8�8�8�899m9A:�:�:�:m;�;�;�;�;�<�<[=s=�=�=�=>.>H>v>�>�>�>? ?N?h?�?�?`@h@�@8ABB�B�BCXC`CDID�D�D�DE"E<E�E�F�F<G�G�G�G�GH+HWHmH�H�I�I�I�I�I�I�IJJJJJ#J)J/J5J;JAJGJMJSJYJ_JeJkJqJwJ}J�J�J�J�J�J�J�J�J�J�J�J�J�J�J�J�J�J�J�J�JK
KKK%K-K5K=KEKLKSKZKaKhKoKvK}K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�KL	LLLL$L+L2L9L@LGLNLUL\LcLjLqLxLL�L�L�L�L�L�L�L�L�L�L�L�L�L�L�L�L�L�LMMMM M'M.M5M<MCMJMQMXM_MfMmMtM{M�M�M�M�M�M�M�M�M�M�M�M�M�M�M�M�M�MNNNN!N(N/N6N=NDNKNRNYN`NgNnNuN|N�N�N�N�N�N�N�N�N�N�N�N�N�N�N�N�N�N�NOOOOO$O+O2O9O@OGONOUO\OcOjOqOxOO�O�O�O�O�O�O�O�O�O�O�O�O�O�O�O�O�O�OPPPP P'P.P5P<PCPJPQPXP_PfPmPtP{P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�PQQQQQ#Q*Q1Q8Q?QFQMQTQ[QbQiQoQvQ}Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�QR	RRRR%R,R3R:RARIRNRVR^RcRkRsRxR�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�RSSSS S%S*S/S4S:SCSHSQSZS_SeSjSoStSySS�S�S�S�S�S�S�S�S�S�S�S�S�S�S�S�STT
TTTT&T/T8T=TCTHTMTRTWT]TfTkTtT}T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�TUUUU"U+U0U6U;U@UEUJUPUYU^UgUpUyU�U�U�U�U�U�U�U�U�U�U�U�U�0E13�3�35g5t5�67!7�89'9J:�<�<=?`?�?�AB(BeD�D�DG=GeGPJtJ�J=LaM�M�M�N�NOO@OPOgO�O�O�O�O�OP'P7PNPtP�P�P�P�P�PQQ5Q[QkQ�Q�Q�Q�QRGR�RBS�S�SUT�TUZU�UV_V
W�W/X�XCY�Y�YEZ�Z[w[�[J\�\&]�]�]�]	^Xd�d�d�d�h�hiifo�o�o�o&p�p�poqr}r�rest�tRu6vw�w�x1y�ybz�zE{\{x{#||�|7}�}�}K~�~_����ƂY�τ܄*�����ΈC�P�[���Ê��p�}����С�r����ˤ����ݨ�3��:�G����J�W���_��y����ĵ*����t�Ϸ3�ʼ#�0�y�ܽ���\��������t�����f�<�������2�����l����u����m���I���� ���R�_��������F���^�k����x���W�l���������8�E�]�!�|�������k�x���g�?�����&�������g�p���T����������h�����J������{�����P�]���$�1������r�����-����%�Z������������0�K�f���*�x�����K����,��������f���$�;�W�s����~������������.�J�f�����������
�������>�����c�'�DQ�
��@o����I�u���	

�
�
�
��
����
�
���������A��,I(5��C�S����0M���,�3��y��D�M � T!�!�!�!�!"0"c"�"�"8#�#�#$U$�$J%�%6&�*+#+9+S+l+�+�+�+�+�+,.,�,--E-�-�.M/�0�1�1F2�2�3F4�4)5<5S5j5�5�5�5 7/7>7S7m7�7�7E8�8�8�89�@�C�CfD�DXE�EJF�FFGzG�GHQH�H�HISI�I�I*JiJ�J�J,KuK�KLBL`L�LMNM�M�MN9N�N�N'OwO�O�OP�P�PQPQ�Q�Q�Q\R�R�R)SgS�S�S5TiT�TU@UU�UVBV�V�VWXWvW�WXdX�X�X1YOY�Y�Y=Z�Z�Z
[([�[�[\f\�\�\]r]�]�]?^}^�^�^K__�_`V`�`
a�a$bnb�b�b>c\cmc~c�c�c�c�c�c�cydue�e#fzf�f(gg�g-h�h�h`i�i�i�j�j kpk�kl`l�lmPm�m�m^n�n�nNo�o�o>p�p�p.qiq r�r�rWs�s�s
|[}�} ~�:�€L�ׁm�������`���4�Ç����p�
���P��������$����ǐ-�F�u�����P�y�����4�����Q�����z�ƙ��!�՚*�`���ћ��-�W���͜�>�ޝ���H�~�֟�*�Ϡ�D�t����C�����������E�[�v���بs���ϩ�0�������?���
�$�=�W�p�������ҭ���7�Q�k�������ͮ���¯��4���@�����
�=�p���B�s������9�b�}����!�E���6��(������F�e��<�������Y������������O��7�r���E���ɿO�x��������#�N�k���������&�C�n������Z�������F�|����+����X��������c�x����=���*�^������������K���,�m��������&�?�Y�r��/�h�������.�U��������P�w�������#�<�����=�a�����W��������������j�����w���4�����J�����X����f����t���(�����6���[����k����y���-�����;�����I�����W����������;�\�3���s�����������������r���T���$�>�r�����������"������������'����������>�[��������G�k���\N��6l�1b��;!���,v����!<�-	L	�	�	
B
�
Q���#N���:
�
��&\����(Y����`���I|�J���H|��������>[����S���`��$~��y�;N��   � �!�!W"�"�"&#c#x#�#�#�#�#	$:$�$"%P%{%�%	&<&w&�&;'p'�':(c(~(�(�(�()9)V)�)�)�)�)*.*Y*v*�*�*+>+�+/,�,!-y-�-	.?.^./5/�/�/�/0J0�0�0N12J2�23P3�45555N5�5�5�5�5T6�6F7m7�7�7�7�7838N8u8�8�8�8�89;9V9:*:~:�:�:E;u;�;�;z<�<�<i=�=�=�=�= >=>h>�>�>�>�>?@?]?�?�?@%@t@A�AB`B�B�B&CEC�CDbD�D�D�D.E�E�F�F�FGG�G�G�GH!HHHcH�H�HOIyI�I�0=1�2�3�3�4a5n5�677�89!9D:{<�<1?Z?~?�A�A B]D�D�DG7G]GHJnJ�J5LNM�M�M�N�N�NO8OJO_O�O�O�O�O�O�OP1PFPlP~P�P�P�P�PQQ-QSQeQzQ�Q�Q�QR?R�R�R{S�S)T�T�T.U�U�U3V�V�W#X�X7Y�Y�Y9Z}Z[K[�[\�\]|]�]�]^Pd|d�d�d�h�hii]o�o�o�opPp�piqrpr�rXs�s�tEu)v�v�w�x#y�yTz�z?{S{o{|q|�|)}�}�}=~�~�~QӁ����1�Ʉք�������=�J�3�����ۊٍj�w����ʡ�Y��������p�ר��ͪ4�A�_�̰D�Q�o�.�ԲH���ʹ�� �N�ʶC�������*�H���W���+��������L�����\�2�������)�y���b�����D����g������
��y�L�Y�w���Q������X�e�����G���&�D���������2�?�T���v�������e�r���Z�2���v��	������6�c���#�����l�����@�����"�������u�����J�W����+�~����J�����������6������������'�B�]����r����>�|��&�y������Y����2�N�j�����x�����������	�%�A�]�y����������]�����1�����U��>K��s�+i��}���M���	�	
y
�
�
~�|��|
�
�
g��i��q��r��&"/��6�/����'D\��m&��s��7�@ � 0!�!�!�!�!
"'"?"�"�"+#b#�#$H$�$=%�%)&�*++0+J+c+}+�+�+�+�+,%,�,�,-<-�-~.@/�0�1�192�2�394�4#535J5a5{5�5�57)787J7d7}7�78�8�8�89�@}C�CYD�DOE�E6F�F=GqG�GHHH�H�HIJI�I�I!J`J�J�J#KhK�K�K9LZL�L�LAM�M�MN3N�N�NOjO�O�OPzP�P�PCQ�Q�Q�QSR�R�RS^S�S�S,T`T�T�T7UvU�UV9V~V�VWOWpW�WXWX�X�X(YIY�Y�Y0Z�Z�Z["[�[�[	\Y\�\�\�\i]�]�]2^t^�^�^B_v_�_`M`�`a�abab�b�b5cVcgcxc�c�c�c�c�c�cedhe�efmf�fgrg�g hwh�hSi�i�isj�jkck�klSl�l�lCm�m�mQn�n�nAo�o�o1p�p�p!q`q�q�r�r/s�s�s�{U}�}~�-���?�ʁ`������d�Z���'���ڈr��g�����C��s�����������'�@�l�����B�s�����.�x���C�����]�������$�Z���ț�
�$�N���Ĝݜ5�Н���+�x���������1�k�����:�բ����������?�R�m���Ҩe���ɩީ*�w�����1�����4�N�g�������ɭ����.�H�b�z�����Įޮ�������+���1������7�j���*�m�����0�Y�t���ߴ�2���'�ڶ"�b����@�R��6�o�����P�����m�����I�ݽ1�P���-���ÿF�o����������E�b����������:�e�������Q�������(�v���������6���������]�o����7���$�X�������������E����g�y�������6�P�l���&�_�������%�L��������G�n��������6�����.�[�����H�{�������������^�����h����e����s���'�����5�����C�����Q������L�����:�����H�����V���
�d����r���&�����������/�V�-���j��}���{�
�����~������i���K����8�i�������������k����������!���������
�5�R�}������>�X���MH��fx\��(v���&m����6�'	F	�	�	
/
�
K����E���1
�
��V�����P����H���:g�;���*v��������
5R}���
M����H��`��a��5E��  � m!�!?"�"�"#]#o#�#�#�#�#�#4$�$%;%u%�%&6&U&�&#'j'�'1(Z(u(�(�(�()0)M)x)�)�)�)*%*P*m*�*�*+++�+ ,�,-[-�-�-9.K.�.//i/�/�/0(0�0�0?1�1D2�23J3�455,5E5�5�5�5�5K6�6=7d77�7�7�78*8E8l8�8�8�8�8929P9�9$:o:�:�:';o;�;�;b<�<�<`=�=�=�=�=>4>_>|>�>�>�>?7?T??�?�?@k@A�ABBB�B�B C2C�CDOD�D�D�D%E�EuF�F�FAG�G�G�G�GH?HZH�H�H@IsI�I�0I1b385�6�8L:�<�<A?b?�?�AB,BiD�D�DG?GiGTJvJ�JAL{M�M�N�NOODOROkO�O�O�O�O�OP+P9PRPxP�P�P�P�P�PQ Q9Q_QmQ�Q�Q�Q�Q[R�RFS�STYT�TU^U�UVcVW�W3X�XGY�Y�YIZ�Z[{[�[N\�\*]�]�]
^\d�d�d�h�h iko�o�o+p�p�p!r�r�rjst�tWu;vw�w�x6y�ygz�za{}{(|�|�|<}�}�}P~�~dn���\�����I�����ҡ�����ݤƨ8�#���3���d�
�~���ɵ,����y�Է8��~������a�ÿ����h�>�������7�����n��� �z����o���N������������K�)����}���\������b�c���9���l�D�����+������l�u���Y��������t�H�'�������2���l��������5�P�k���d���P���������k���@�\�x���A����������3�O�k��������������C�����h�,����J��N���	�
���
���F��� �H����5R�1�8�4�I�R � �!�!�!"5"�"=#�#Z$�$O%�%;&�*>+X+q+�+�+�+�+�+,3,�,J-�-�.R/#1�1K2�2�3K4�4A5X5o5�5�5�6X7r7�7�7�89�C�CkD�D]E�E�FKGG�GHVH�H�H$IXI�I�I/JnJ�J�J1KzK�KLGLbL�L
MSM�M�M N;N�N�N,O|O�O�OP�P�PQUQ�Q�Q�QaR�R�R.SlS�S�S:TnT�TUEU�U�UVGV�V�VW]WxW�W XiX�X�X6YQY�Y�YBZ�Z�Z[*[�[�[\k\�\�\]w]�]�]D^�^�^�^P_�_�_`[`�`a�a)bsb�bcCc^coc�c�c�c�c�c�c�cze�e(ff�f-g�g�g2h�h�hei�i�i�j�j%kuk�klel�lmUm�m�mcn�noSo�o�oCp�p�p3qnqFr�s�?�ǀQ�܁r�������9�ȇ�����u����U��������)����ؐH�z�����U�{������6�����V���������#���b���֛��2�\���Ҝ�C��ǞY��,��F�y����H��֣��� �`�{���x�������D����)�B�\�u�������׭�	�#�<�V�p�������Ү���ǯ��9���E������r���S�����#�>�g������&�G���;����!�g���������^��ɻ���6��9���m�˿T�}��������(�S�p��������+�H�s�����
�_����W���-���j�����)�}� ���`�������2���>��������+�D�^�t�
�4�m�������3�Z��������U�|������%�>�����B�c�����\��������������o�����|���9�����O����]����k����y���-�����;���`����p���$�~���2�����@�����N����\����������@�^�5���x����	������
�������w���Y���)�@�w�����������$��������)����������C�`�������
�L�m���a)�G�B��=�&��.{����&>�/	N	�	
D
�
S���
(S���?
�
�7�
�*^������N�O��Y�������C`����U���q����S��% � �!h"�"8#}#�#�#�#�#!$�$$%b%�%>&�&L'�'?(h(�(�(�(�()>)[)�)�)�)�)*3*^*{*�*�*+@+�+4,�,�-.`./�/�/0\0�0S1!2�2R3�4 5:5S5�5�5�5�5Y6�6K7r7�7�7�7�7888S8z8�8�8�8�89@9X9:,:�:�:�:V;�;�;�<�<n=�=�=�=�=%>B>m>�>�>�>�>?E?b?�?�?@'@y@A�AqBCGC�CdD�D�D�D3E�E�F�FIG�G�G�GH&HMHhH�H�HTI{I�I�0=1�2�4%6�7o<L>�AODG:J#L�M�N8O�O�OPlP�PQSQ�Q3R�R�V8W�W^X�XsY�YZ�Z�[|\�\^]Ad�hNoprUr�r3s�s�tu�u�v�w_x�x�y3z�{V|�|}j}�}"~~~�~6;����p�����������U������
�����,����1���������A���������������A�������b�C�����!��������{�P�+�u�4����J���r���3����������!���p�D�c\1o	]
b``
KMU�S�l{-�����$ � .!#$$�$%&�*,-�-a./�/�12t34�4�5�8tC�C?D�DDE�E6GjG�G�G?H~HICIwI�IJWJ�JKPK�K�K0L�L�L)MyM�M	N�N�NORO�O�OsP�P�P+Q|Q�QLR�R�RSUS�S%TYT�T�T.UmU�U2VfV�VWFW�WX?X�X�XY�Y�YZhZ�Z�Z�[�[�[A\�\�\b]�]�]^k^�^;_o_�_�_D`�`�abHb�b�b+cMe�e�eRf�fgWg�gh\h�h&i�i[j�j�jKk�k�k;l�l�l+m{m9n�n�n)oyo�opip�p	qYq�q�r�~|���#���D���d���}����:�L���^���u����E���i�������@�����^�����O�Z���
�N�����_�����X�0�d�������L����D������������Y��������l�E�����n�{�1��l�����o�����E������e�����|�2����Z�4���U�Z�	�h��l�&�����L����n���g�������
�.�$������d� �����-�8�=�M�G�!�����5�}����>����k����W1&��gw	q
K��E��\
�y:� �6��5}�
M�$��A�B � �!#W$�%�&�'Z(�(�(0)x)�)*P*�*�*+�+e,>-�-�.g/�0�1g2�4�6d7�7�7*8l8�8�829�9U:	;<�<�=�=>_>�>�>7??�?�?�@LA%B�BtCNDPEFAG�G�G?H�H�H�I�2�4'68o<L>�AODG:J#L4R�R�V9W�W_X�XtY�YZ�Z�[}\�\_]Bd�hOoprVr�r4s�s�tu�u�v�w`x�x�y4z�{W|�|}k}�}#~~�~7=��΅r���ܙ���âV��Ūİ
�����.����1�������C�������������C�������d�E�����#��������}�R�-�w����L���t���5������#���r�F�e^3q	_
dbb
MOW�V�o~���
�& � #&$�$
%&.-�-c./�/�12v349uC�C@D�DEE�E6GjG�G�G?H~HICIwI�IJWJ�JKPK�K�K0L�L�L)MyM�M	N�N�NORO�O�OsP�P�P+Q|Q�QLR�R�RSUS�S%TYT�T�T.UmU�U2VfV�VWFW�WX?X�X�XY�Y�YZhZ�Z�Z�[�[�[A\�\�\b]�]�]^k^�^;_o_�_�_D`�`�abHb�b�b+cNe�e�eSf�fgXg�gh]h�h'i�i[j�j�jKk�k�k;l�l�l+m{m9n�n�n)oyo�opip�p	qYq�q�r�~~���%���F�ۂf���
���<�N�Љ`�ъw��ɌG�Ӎk�������ҕ��^�ӗޘQ�`�����Z�e�����M��D���ұͲ��n�G�շ��|�3�
�m���}�4�
���\���X�]��i���g�������
�.�$������d� �����=�N�I����m���Y3gx	s
]
�{<� �
9%��CD !�!X$�%�&�+g,@-�-�.�0�1j2�9U:
;<�@NA'B�BvCQEF�H�I+1�2�46�7]<:>�A=D�F(JL�N%OrO�OPYP�P�P@Q�Q RtR�RjS�SToT�TUtU�U"V~V%W�WKX�X`Y�YZlZ�Z:[�[
\i\�\K]/dnh<o�o?p�qCr�r!s�sotu�u�vwMx�x�y!z�{D|�|�|X}�}~l~�~$)����^��ʊ
�n�ʙ��ߡ����C�����N���^��ò7���������=���2������7���F����|��������������3������y�-�f���@������r���6����������������/�������P���%�1����������������i�>����a����8���`���!���u�u�
���^�2�QJ}]	K
PNN
9;C�a�wA�Z�i�\�p��x o �"$w$�$�%�%-�-O./y/�1	2u2b34�8bC�C-D�D2E�E$GXG�G�G-HlH�H1IeI�IJEJ�J
K>K�K�KL�L�LMgM�M�M�N�N�N@O�O�OaP�P�PQjQ�Q:RnR�R�RCS�STGT{T�TU[U�U VTV�V�V4W�W�W-X}X�X
Y�Y�YZVZ�Z�Zw[�[�[/\�\�\P]�]�]^Y^�^)_]_�_�_2`q`�ab6b�b�bc;e�e�e@f�f�fEg�g�gJh�hi�iIj�j�j9k�k�k)lyl�lmim'nwn�nogo�opWp�p�pGq�q�r�~j������2�ǂR�ڃk�����(�:���L���c����3���W��z�ҏ������L���˘=�����;���M������F�R��	��:��2��������E������Z�3�����i����Z���[�����1�y���	�Q���j� �����H���C�H���V��t���:�����\���U��z�
��������������T����b����p���$�~���2�����@�����R��u���)�����7�����E�����S����a����o����
�+�;�5�����!�i���*����Y���E��Ue	_
��1�J
�g(���$��!i��r��/�0 � �!E$�%�&F(�(�()d)�)�)<*�*�*�+S,,-�-{.�0v1U2R7�7�78Z8�8�8 9o9C:�:�;u=�=>K>�>�>#?k?�?�@:AB�BbC>E�E�G�G-HoH�H�I�a�a�a�a�a�aUbdbsb�b�b�b=j�kXl�s
trt|t�t�t�t�t�t�t�t�t�t�t�t�t�t	uuu'u1u;uEuOuYudunu/`m`y`�`�`�`�`�`�`�`Ma�a/b;bJb�b�c�c�c�c#dud�d6e�e�e�f�f�f�f�g�g�g�g�g�g�g�g�g�h�h�h�h/i:iKi}i�iyj�j�j�jkik�k8m�m�m�m/n�no|o�op7p�p?q�q�q�qr8r�r,s�s�3�3i5v57#79)9�MR�]�di�oqqG{��Ȃфބ����E�R���Ŋr������ߨ�<�I�L�Y�%�2��
������"�T�a�`�m����:�G�~���m�z�������������}���R�_�&�3���������'�����z���!�.�&���������FSq����

�
�
����
������!.*7����{��!�!�"�"�#	$+%+--�1+5"717@7�8�8�8�r�r�s�s]}b�/�ș,���������G�ڨѩ2���?�u�*���H�>����Q�������~�����e�?�,�����M�o�����P�nd��	�^�����~��&��=
 �!�"e#<$}%&�&r'#-�-A.7/�/�0L235w;�<
B�B(CD�F�z,{}{�{|p|�|}c}�}y[y�y~P~�~��v����t����T����(�r����^���$�n���+{|{�{|o|�|}b}�}~Zy�yozO~�~Q�΀���s����Ѓ�����q�����]���p�m���o�${u{�{|h|�|
}[}�}�}Sy�yhzH~�~J�ǀ���f����Ƀ������j���}�V���i�f���h�({y{�{|l|�|}_}�}~Wy�ylzL~�~N�ˀ���j����̓�����n�����Z���m�j���l�n3D579�<E?�AmD!GXJELcR�RW�W;X�XOY�Y�YQZ&[�[�\2]�]ed�hto4p*r�r�rsst�t`uDvw�w�x?y�ypz1|�|�|E}�}�}Y~�~m{���i�
���V������������0�@�1������m�C���s���	���6���������y�Q�����8�(� ���������������U�4���������]���'����x�P�����u�9������	�
���
����1�Y�>E��V�_ � J#g$�$\%H&W-�-�._/41�1X2�3X459�C�CtD�DfE�EPG�G�GH[H�H)I]I�I�I4JsJK6KK�K
LLL�LMXM�M�M%N�N�N1O�O�O�O�P�P
QZQ�Q�QfR�R�R3SqS�S?TsT�TUJU�UVLV�V�V#WbW�W%XnX�X�X;Y�Y�YGZ�Z�Z[�[�[ \p\�\�\|]�]�]I^�^�^U_�_�_"```�`�a.bxb�bcHc�e�e1f�f�f6g�g�g;h�h�hni�i�j�j*kzk�kljl�l
mZm�mhn�noXo�o�oHp�p�p8qsqSr�s"�L���^�������'���F�������	������b�������6�����Z�����[��������h���������������M���J�'�b�F����0�+�������������f�����/�'������	���G���a�������t���������e�����E�������l8�VQ1����	�
�F����SXf������ �!{"�$�%_'?,-�-).$/b1423
:�:_;�<&A�A�BCD�E�FYI�IՒ��A�F�dL|���*,�0P1.9B:�<X?�A�D5GlJPLLM�M�NOYO�O�O@P�P�P'QtQ�Q�]zd�h�o�p�zy�̂��:�����+�������K������������������5�
�-��z�����[���7&Z�'!="`#x&z*�,c4�4�58�>�@/F�F�HJXL1N
P�Q�S�UnWGY [�\�^aTcecvc�c�c�c�c�c�c^d�i�mwq�yz�{]�E�9���p����+������S���ۛ���ڜ�)�������۩�����ݯ���������(�l�״/�O�f�����M���>������Y�����1������,��������e���Z��� �����B������3���X���x�����������%�/�	����x����I�����U�u�%g��3C	,
C��}����d��
x�I��E����#�#8%R&�')(m(�(�(D)�)�)*d*�*(+H._/%0�4�677y7�7�7?8�8�89M9!:�:�;�<X=�=�=+>s>�>?K?�?@/CFD�D9G�G�GHTH�HpI1UN�$�{�
�P���!�*
5�6W�q���U�/�Ǭ��������ڿ��y�M���D�O�8���=b�9,d!G#�'�*�/�4�6�<�?sDXG1IN��o���D���!�*5�6K�e���I�#���������ο��m�A�w�8�C�,���1V�- X;#�'�*�/�4�6�<�?gDLG�����������";BIkry���������������������%,07>OSW[_cgkosw{������������������#'AEITX\`gv����������������-1<@OZcgnu|�����������������$7?GOXfn{�����������	 >Oglqv~��������������#(-27<AFKS[c{����������������   / 4 9 O T Y m y ~ � � � � � � � � � � � � � � !!#!+!0!5!:!?!D!I!N!S!X!]!b!g!l!q!v!{!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!""
"""""'","1"6";"@"E"J"O"T"Y"^"c"h"m"r"w"|"�"�"�"�"�"�"�"�"�"�"�"�"�"�"�"�"�"######8#=#B#G#L#Q#V#[#`#e#j#o#t#y#~#�#�#�#�#�#�#�#�#�#�#�#�#�#�#�#�#�#$$$0$8$@$R$c$h$m$r$w$�$�$�$�$�$�$�$�$�$�$�$�$�$�$�$�$�$�$�$�$�$�$%	%#%(%:%?%D%I%N%S%X%]%b%t%�%�%�%�%�%�%�%�%�%�%	&&/&7&?&L&T&\&a&f&k&p&u&�&�&�&�&�&�&�&�&�&�&�&�&�&''
''''!'&'+'0'5':'?'W'_'g'u'z'�'�'�'�'�'�'�'�'�'�'(,(I(q(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�() )()3);)C)T)\)d)o)w))�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)****)*1*9*>*W*_*g*�*�*�*�*�*�*�*�*�*�*+
+++%+A+F+N+V+e+u+�+�+�+�+�+�+�+�+�+,,,$,,,9,D,L,_,j,u,�,�,�,�,�,�,�,�,�,--,-F-e-j-r-z-�-�-�-�-�-�-�-�-�-�-�-�-�-�-..
.....#.(.?.G.O.T.Y.a.i.q.�.�.�.�.�.�.�.�.�.�.�.�.�./
///"/*/2/:/I/Q/Y/^/c/h/}/�/�/�/�/�/�/�/�/�/�/�/�/�/�/�/�/�/�/�/0	00$0,040C0V0^0f0n0s0{0�0�0�0�0�0�0�0�0�0�0�0�0�011 1(1<1D1L1Q1Y1a1i1n1v1~1�1�1�1�1�1�1�1�1�1�1�1�1�1�1�1�1�1�1�1�122
22222#2(292A2I2Q2h2p2x2�2�2�2�2�2�2�23	33*3C3R3]3f3w3�3�3�3�3�3�3�3�3�3
4414M4a4k4s4|4�4�4�4�4�4�4�4�4�4�4�4�4�4�4555"5.595A5I5Y5i5~5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�56
666"6*626:6B6J6R6W6_6g6o6w66�6�6�6�6�6�6�6�6�6�6�6�6�6�6�6�6�67777&7+737;7C7K7S7[7`7h7p7x7�7�7�7�7�7�7�7�7�7�7�7�7�7�7�7�7�7�78888'8/848<8D8L8T8\8d8i8q8y8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�8�89999'9/9<9G9R9f9k9s9{9�9�9�9�9�9�9�9�9�9�9�9�9�9�9�9�9:::: :.:3:8:=:S:[:c:y:�:�:�:�:�:�:�:�:�:�:�:�:�:�:�:;;;;#;+;9;A;U;];e;m;u;};�;�;�;�;�;�;�;�;�;�;�;�;�;�;<	<
<<<<<!<%<)<-<1<5<9<=<A<E<I<M<Q<_<k<|<�<�<�<�<�<�<�<�<�<�<�<�<�<�<�<�<�<�<===+=;=@=P=U=e=j=�=�=�=�=�=�=�=�=�=�=�=>>
>>>.>6>>>F>K>S>[>c>t>>�>�>�>�>�>�>�>�>�>�>�>�>�>?????1?A?I?Z?o?w?�?�?�?�?�?�?�?@@3@A@T@b@u@�@�@�@�@�@�@�@�@�@�@�@�@AAAA A(A0A8A@AHAMAUAZAbAgAoAtAyA�A�A�A�A�A�A�A�A�A�A�A�A�A�A�A�A�ABBBB#B+B3B;BCBHBPBXB_BgBlBtB|B�B�B�B�B�B�B�B�B�B�B�B�B�B�BCCCC$C,C1C6C>CFCNCVC^CfCnCvC~C�C�C�C�C�C�C�C�C�C�C�C�C�C�C�C�CDDDDD$D,D4D<DADIDQD]DeDnDwD�D�D�D�D�D�D�D�D�D�D�D�DEE*E/E<EAETEYE^EcEkEpEuE}E�E�E�E�E�E�E�E�E�E�E�E�E�E�E�EFF2F;F@FXFtFyF~F�F�F�F�F�F�F�F�F�F�F�F�F�F�F�F�F�FGGGG$G)G.G3G8G=GBGGGLGQGVG[G`GeGjGoGG�G�G�G�G�G�G�G�G�G�G�G�G�G�G�GHH
HHHHH#H(H-H2H7H<HAHFHKHPHUHZH_HdHiHnHsHxH}H�H�H�H�H�H�H�H�H�H�HIIII(I9IBIKITI]IrIzI�I�I�I�I�I�I�I�I�I�I�I�I�I�I�I�IJ	JJJJ$J)J2J7J?JDJLJQJVJ^JfJnJvJ~J�J�J�J�J�J�J�J�J�J�J�J�J�J�J�J�JKKKK K8KPKUKoKtK�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�KL
LLL L%L-L2L7L?LGLOLWL_LgLoLwLL�L�L�L�L�L�L�L�L�L�L�L�L�L�LMMMMM%M,M4M9MAMIMQMXM`MeMmMuM}M�M�M�M�M�M�M�M�M�M�M�M�M�M�M�M�M�M�MNNNN N(N0N8N=NENMNUN]NeNmNuN}N�N�N�N�N�N�N�N�N�N�N�N�N�N�N�NOOOO O'O/O4O<ODOLOSO[O`OhOpOxO�O�O�O�O�O�O�O�O�O�O�O�O�O�O�O�O�O�OP
PPPP$P,P4P<PDPLPTP\PdPiPqPyP�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�PQQQQ'Q4QDQLQ_QgQxQ�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�QRRRR R(R0R7R?RDRLRTR\RdRlRqRyR~R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�RSSSS$S,S1S9SASISQSYSaSiSnSvS~S�S�S�S�S�S�S�S�S�S�S�S�S�STT
TTT!T'T-T3T9T?TETKTQTWT]TcTiToTuT{T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�TU	UUUU%U,U3U:UAUHUOUVU]UdUkUrUyU�U�U�U�U�U�U�U�U�U�U�U�U�U�U�U�U�U�U�UVVVV!V(V/V6V=VDVKVRVYV`VgVnVuV|V�V�V�V�V�V�V�V�V�V�V�V�V�V�V�V�V�V�VWWWWW$W+W2W9W@WGWNWUW\WcWjWqWxWW�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�W�WXXXX X'X.X5X<XCXJXQXXX_XfXmXtX{X�X�X�X�X�X�X�X�X�X�X�X�X�X�X�X�X�X�XYYYYY#Y*Y1Y8Y?YFYMYTY[YbYiYpYwY~Y�Y�Y�Y�Y�Y�Y�Y�Y�Y�Y�Y�Y�Y�Y�Y�Y�Y�YZ
ZZZZ&Z-Z4Z;ZBZIZPZWZ^ZeZlZsZzZ�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z�Z[
[[["[)[0[7[>[E[L[S[Z[a[h[o[v[}[�[�[�[�[�[�[�[�[�[�[�[�[�[�[�[�[�[�[\	\\\\%\,\3\:\A\H\O\V\]\d\k\r\y\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\]]]]!](]/]6]=]D]K]R]Y]`]g]n]u]|]�]�]�]�]�]�]�]�]�]�]�]�]�]�]�]�]�]�]^^^^^$^+^2^9^@^G^N^U^\^c^j^q^x^^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^____ _'_._5_<_C_J_Q_X___f_m_t_{_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_�_`````1kNsN{N�N�N�N�N�N�N�N�'�~�
�S���!�*57Y��������X�2�ɬ��ʳҳڳ����������$�,�4���|�P���������������F�Q�N�V�^�f�n���KS[px��<FNV^fnf$J#�'�'�'�'�'((((�*�/�4�6�67777#7+7==&=.=6=>=F=N=�?vDjGrGzG�GP:�<g?l?	BB�D�DDGJG{J�J�Q�Q�Q�Q�Q�QRRRRRRRRR�]�]�d�d�h�h�o�o�p�p�p�p�p�pq	qqqqq"q'q�z�z�z�z�z�z�z�z�z{{
{h�T�U�V�W�X�Y�Z�[�\�]�^�_�k�l��������������������� ���AFKPU�"�#�#�#�#�,�,�,�,�,�,�,�,�,�8CCCC	C
C�F�F�F�F�F�F�H�H�H�H�H�H�J�J�J�J�J�JpLuLzLL�L�LINNNSNXN]NbN"P'P,P1P6P;P�QRR
RRR�S�S�S�S�S�S�U�U�U�U�U�U�W�W�W�W�W�W_YdYiYnYsYxY8[=[B[G[L[Q[]]] ]%]*]�^�^�^�^�^_a#a(a-a2a7a�d�d�d�d�d�d�d�d�d�d�d�d�d�i�i�i�i�i�i�ijj
jj�m�m�m�m�m�m�m�m�m�m�m�|�|}}}} }!}"}#}$}%}����	�
���
������������;�����(����	���1�
����Ĩ��!�������T�Y�^�c�h�l�"�'�,�1�;�����$�)�.�2�4�9�>�C���7���C���h�������
��������������������)��z���������HMRWCS	I
��
	

����������������&$g%�&M+R+W+\+a+e.g0l0q0v0]91:�:�;4@9@>@C@H@LCEE
E�H�I�UOTO�O�O;P�P�P"QoQ�Q�`�Q:�<q?B�DPG�J~M	R�]�d�h�o,q{m�`�m����%	�Z�"�#�,�8C�FG�H�J�LgN@PR�S�U�W}YV[/]_<a`cqc�c�c�c�c�c�c�c�dj�m&}���~���!�@�����-��6�!�ɨĩ!��&�������m�q�6�@���3�7�H���<�����(�H���m��������������.�$����\HX	N

������+$l%�&f+j.{0b96:�:�;M@QCE�H�I�����������������������������������������������������������������������������������I�I��T\���<��`?&�X����o����	\�0��`?&�X�u�U���~�����
4�I�`?&�X�C����a�����(���Z���`?&�X���Iӻ,��X,�}��core_intrinsics�fmt_helpers_for_derive��_�_�`?&�X�
}�s��4~V$�u�����derive_clone_copy����`?&�X��
�����clap::value_parser������	�
�
�`?&�X����������I�`?&�X�A����z���"B���`?&�X�
C�oN����VL���	4!!�!�`?&�X��� ������
��
�
�`?&�Xݹ8I���t�,�}�J��������`?&�Xݺ�Ը��d6����
 �
�
�`?&�X�6c�������O�
�
�`?&�X�K(�.�Ʈ����~�
�
�`?&�X�I}b����q��TL���:��`?&�X�J���N�p��	L�0��`?&�X�H�AJ��>����	�
�
�`?&�X�ҙ��{S����8�
�
�`?&�X݁/�|�Y�U���I�`?&�Xݺǖ���t,���������`?&�X��{s�~�7w���\�3��`?&�X�}��@,yt�,��������`?&�X��-&�D������
(�
�
�`?&�X�E�%�i�V�m��\�����`?&�Xݮ���g;
B��,�C�����_�_�`?&�X݃�@�
�}E������
�
�`?&�X�V�O�)�u������
�
�`?&�X��ůԀ����!�
�
�`?&�X�sD:b�ry�T,������_�_�`?&�XݧxH�+x����Hm���`?&�X�Y�*��X��	T����\�����`?&�X�����t�������
�
�`?&�X�d&��1�p�����
�
�`?&�X�8x�֩^V�tU,�_�������`?&�Xݴ��e���L���O\������`?&�X�0�C#�"-�������`?&�X�P9�k8����\�O��`?&�X�5���R�D{���L�b��`?&�Xݻ��_g���VT�������`?&�X��ݮE�������n�
�
�`?&�X��a�=|[�����I�`?&�X����c]���������
�
�`?&�Xݷ��L��e������
�
�`?&�X��jDj��J�����$�
�
�`?&�X�y$��wP�Tt�,�	l�������`?&�X��fw�}�t	,���������`?&�X�`�,��p������
�
�`?&�X�p�9����t ���Z���`?&�X��'�Z�7"������
�
�`?&�Xݢ���d�
���UL����`?&�X��&M��
74�,�/	�����_�_�`?&�X���'R�����,�f	�����_�_�`?&�X�=v�{i����L�	���`?&�Xݎ�7��N�V�e�f\��	derive_eq������`?&�X�0��� C���L����`?&�X��%�r����\��
��`?&�X������pC�����	�
�
�`?&�X�9a�4T��,�����	�
�
�`?&�X�m~��^u�����
�
�
�`?&�Xݩ��k�2n����C
�
�
�`?&�X�	�������,�(�����_�_�`?&�X�4�����'��,�	_�����_�_�`?&�X��jX�
p�~	$�9�������`?&�X�u�dNܴE���(����`?&�X�l�(<E_EQ����B�
�
�`?&�X�ѥ�ٕ�A���	W���`?&�X�
F���E�p��X\�
��`?&�X�L8��%�"��U\�9
��`?&�Xݲ��,%m|��0
���`?&�X�^�.]������$�
�
�`?&�X���h].}���,�

�����_�_�`?&�X�d��O��H�������
�
�`?&�X�n�׽�B�VL�=������`?&�X�5�t4)��-���L�B��`?&�X��&�h��*����

�
�
�`?&�X�:���C������K
�
�
�`?&�X�)c̆�O��W4�
��0!!�!�`?&�X�@��S2�
����\���`?&�X�ԹL�F9)V�����
�
�
�`?&�X��Z"a^�Yy�	L��������`?&�X� i�e(q����/#���`?&�X�c�Q�������/Q���`?&�X���֎�QC�I�I��`?&�XݫX��W���U,�w�����_�_�`?&�X�i��mGs����XL�J
��`?&�X�j���C�����$�
�
�`?&�X��q��\,�2����S�
�
�`?&�X�f3���)�����
��
�
�`?&�X�^��>�
tV,���������`?&�X�W�~��ċ��,�������_�_�`?&�X��@"�2|������
�
�`?&�X�q�3vm3=�V,������_�_�`?&�X�+1Ib`����
��
�
�`?&�X�ε72�~����L���`?&�X�rL�v I�	,�������_�_�`?&�Xݏ��!�������
�
�`?&�X�M=�@?Ѡ����D�
�
�`?&�XݭC)��^����/^���`?&�Xݺ�Sa�@����(����`?&�X݌ַ�!��6���(����`?&�Xݠ��b�j�\���	����`?&�X��-5�5�f���W��
�I�`?&�X�(�*�{��ħЦ��������e�)���y���G�����Q�����.�h�~�=���Ʀ|�ܧ���������L��٦����ȧ`�$����c�ҧ��8����w�ק��B��Ԧ�����V��ަ��^�ͧo�3�����r���˦�����j������m�t���������[���0�����~��K���������Էk�=��	�w���w�!�L�u�Z���'�
��E�*�Y�c��߮��>�I�Q���ԯ�!���ƻ��}��[����p�۳�����ܺ�������Ы���"�N�^���Q���������������ڴV����������6���x���G���\�ʩ~��� �5�$��I�B�@���I��������h�ʴ-�<���Ҩ���[� �&���ķ��F�q���v�7�;�L�0��e�J�������w�n�v�����A�
�2��Ӷ��%�z�ת9�����۰ح5���
�۵ԱϮ���9�A�m�}�߬o�Թ�˳�����̺۸��u�������.���S�������n�įz������>�N�K���g�`�g����ODHT �������_thn^;0���,�M�'���u0*1.�Z�F�5��;�	�[.pO��
����_ps��_�CP�B	@���a��
��dp�_I	`n��M�n@���C� @�1���|�����CI 3����QE���,�G>9p��:K0\�W>���_�[Ly0�jj�kip�~��v5��),����	����P�u�,��P���F}�8!�5����0~����؊$0|��}<m�(�LǕvQ��)�[��}�T�,`oC
���2q�]��u4���Z�8e�-����:��Mq�˯;�B�,���;PQl]׽�B�h[+׉.C DG�KnD �0B�B ���21�HE@+�>�B,�H���^���I�:Ha$I�jfzT^��M �ƾ9���P��&�ZrvQ�.�l��VT������VU� ��h�Zp�/Pqb~@^{�^�l^��q7��?�_pM�u��b��>d��e0���j�i�T͒� mPR=��/jq@Ѹ�R4Ps@Q��x	xP�u��&����J,��M���F��է��˛
�q������)�7���4s�INՆ@��:�����X�%�����������d��a��������CI5�̌@�k��nꛍ :5I�k��������8rBGƒ@/��^�>�0�:S�p���O�p�������:ie�,̦����>�	���H��K����;�����������ܦ`qb���@���~�t"����[�t_�`�V��|�pMe�<��h��=�������N��\���7���6	� ���N����Дc�)L����Xy9F��ydЄ2����d;�~ˀ����*��]w�%�@�a@J�h�@:�a�\���0m��*��a\p�"Հ��)�C��֠��x�v{��`����cO����Cʎ_��@����,��L�-�i����0�&2
�����Ċ����t���C>@�,�{_�M�>��Iՙ� �-5������<9�������Cs�3`Û�@�`ˈ�k��&͋�V�rQY-����uE�nZ�Ac�-��m�R���i״9�%�&��<s��
уsgen�!gL���V/�\���l�P��;U ��Z�^�4�j��]��d�cJ aF�H�(<"�����np�#q�GA!ܟ%ѱ	�?��'�"g��A-�)�����V�*1[��Y#�-���kx�.X�>n�
1!��Ok�04����h�6�}
	���7A���ͫm8�Ļ��%R�7�J��a�381����?��7�_ţ��+@�l�*++B���\M/jBEu�(�t3EAE��D��,G�����GIa���kJ�v����KAS>��L�
@L��CM��H?���O���%VQQvF���T�Gl��]X1Д W�>�Z1D��Q\,aq!���Ѥ&a��tnF�Od1�ai�cWeq�����Xh!���;t��i�MvY�^l!!zR�	�u�����*�x�A����y�Ӱ�3��z������yZ�����}!d5-���}�#PW��=�����sl~�E��hwc���+N��}a��:q%(��%��Z/�ރ�s�N�zX�1�v�m��a
N7��_��25�nkÉ�p�Z�vf�A(��ƈA�$��N��QE[�T���:�h�M.舱���Y%��q ���!���9�ߕQ�1��R���u�Kk�:��a�xo-��N��(�dI�48�]���'���dEZ&�`��c�x뮶���ϡ�0���*��~)W�1�a\r_��Q�A��Ы����`X��Q
y"�aݍX|�y��4�s�����?9q��!�@�jC��b���3�w��SN�}��q��Lm��s��B���A�\��6U!�qܭ<:�6��P7��2
������Ϟ�N��x��ё�j���+�1�.@�й���P�Y1�`��7�9�����Y�������,G�����q&4����QL�5k���AE�P���qv�M������̬�LL��Q����w��1��Ҵ��1>'ަ.�t�Ĉ���AdT�Q`��-����x��,+0�2���A�	�aa���i�y+��4bO�'�y�A
��==��a�
�5(�aƻtS�����N�s��=��1�ӈ� �D���K��lSrO�JU�P�"F�o0����RI �\g/�U��>@_�����
��rbq��
ki��	�!��B���98��i2�b���B��V]M��_�b���B
EM�Z�&�x����6&b�p~��#P'�5�_U�P�*R6�J�Q�,����ⲋ.���n��0����?%�4ҌO�d͏�4�BZ;�A6�q�H;Z�#6"PϏ�s6�8�N�u&0="�9F��2L@}U��Nw@�# Nm	D�A� @�7�G��I�IBkh��Z�J"�����{�M����5�Obl�_����Pr�V�1b��Q���-��:GP�ޔ����[S�]�ȰvT�b�lJC�T�}���7jP�3/V�Wu�q���TBD�S��mPY��]���{ZR1�!h}�_^2m���/��e�/�T��5f2�-k���wg҇X[�(h�0\����i2
��!˘�hr<��p�hRa�.�̦gR��2ũel�΁A䛗Wg�����T��h�9M��R�XhR`��-�av2�]�dDIx2S�eιx�����O�x҆�b�!ǵ}�@G7�?~b��%�"�y�V㍁"���K��ҁ�i�V��J��h����懢7@)���Rv��,�|ɊrJ�MY庐��C�`?&�X�y��ё"�[sO͔�d���g���(�������I�{��"�E��:Н���W��砒i�ݼ
��ri�#z�\��=l���+����M�b��*��\�"eX 7q�T�b���3�&���k]�y_��"-h�Q2~��&�jVDA�v�\��?���JuC>��Bf��Cp��R�f	'��ùB�!�������AK���������Ҿ}`d��6�b�quAj2�Ң�A�_�0��KTv
���瞖����
�O-��D����#nȂ�Iך����enC��2[�w��L
�齤��4�bpE�G��M��G����2eQ;wK�Kׂ,ȁ>�.�آ�;��V���i"Rv�����s�w�5���R������$����0�RN���|	@c����0���q�R=�1��|�B&�k���Y�'���r)��"A��B� f�$���r��
QO	��0Go�]��ަ+��T}�u�
��E�+�������-{�r�,x��4g|}T�O-m�]������l��r�^�?��C��'/?�s����C	#�Q��S�9�~�B	��x7�/Lqsc���������Σ����~�C�x#�	S�Yq��3���w\�}�.�9� P��|e5S�
�G�G��3��Q$���c����e3��:��$�)�#��L���#;ҵ~E3����nv��ksWv�_� 3a��_�@�!s/��c7�"�VQ@x�+c�#�wl3-�rP����/�U���ي3��v�}iFt5�����y��7�����9C/�g��T>��\V��?s��W�x?c����!	A��ԟ�
�AÛ��D��D#_��u�B*Js1֩~��KZ�T��XMs���%�`N�28��VyP�"a�05�NP#��h��P��o�5	�U3���J
U#����
W��M0��Wҡ��|Z.K.0)Z##�G��>\srAa���!]�6>�C�]#���q���_�G���Y`S2��ՁF�a�f���R;b�K-X���Vc���;1��b�m.6vJ`��HO��8f�ց�XI�f��4��ޣ]h�9q*Z�Pi�?N�e�iS�vl���6bs�:��?kCqH��z:mm��qlo�qb��K�DSroIt��mkpS�����~rS�x ��w/K��on�y3xMP�Gڑ�C@������c�v����I��)��/���hW��@׏�t*2�|�CrOf�܈�C/Yh�H�c��8��C��S]�2����3f���Y��Դ`��8�󍹸sw]��c
�����o��ꣁ��û4	�/ڸ���Y�x���f�?$���ӝX�����;c�w�T�S�`K��y���IpaU}�s�������,���HZյc���'HJ�3s8��⡶�!Pu�UV��*�
��|��4��0���1��3����z�7X��S��l�,-|�#fN��!>��C����7�ƒ�Ϯ`z��s�
L&vZ�s#���(��C������`ϣJ��+�����hPN*��ϓѐ}"��ӣ�T�����ڳ8"�Ni��sp^
�aiU��5L:I�e��T��d���ӱ�!����'�(�_�J�4����3�����C�`�u�c�*~0���(�RQ������r���3��h�պ��D�8*���n��F�0�ヸT��C�c��V �(�][*/�.������C��̟X���w�K]��]�LmnR�c7Q��Z����N�H�S&����}���;�/���S<���WG�t�p�@��<T�
��hD��o�v�k�����T�T�:~]4���ha�	�>)���
De4e��
�:�(��+DЎUF<KHD�%%�{X�b��#�:$��|غ���Ţ�m��R�t�n>S:�H
�@��T����M4��I�ـ������ �a�OA�~����É$tL+,��)�נ�
�1�/������	.0��&�d3����c�5�n�%�<c6���!��*�7�� ��7ԦYbYnR7Tb�}U�C�7�!����b;�l�(?AI�<�=*W���8���I��>�~';��98T*�����6dU��8�K�<�Ph�����B�D���-5�C�_�����G��ĩ0�ujG��E&�J�M�zMk�~�O��c��}PP?'s�LjOT����}M�O������@R��b���s�O�*�f���Ud(b�	��P
K��3{OT@��Ô�Q$�Kغ�ZD�-5|1��]��=L=�-�^2F|�,e��[�J|�e�.R_r�#i�W�?��/j�dx��PN�o�4<�5�Fppd!��:p77q��kiЗ<rT����|�'t��[ouEZtd5&�R��u�d���H��x�b��M�y�=�tަ@�z������.�zď���F��|�����o}D���?g,��)�qsK�t�P
���Ղ�D,�yjRӃ�4
s;(�T���җ�ćd�����$`��U����c��Tq�U��ה�
�uN�>ؐD_�.��5����R�$���tɼ�O�*a�$�k��`�����͜TliYA�S���
%�{�J��,�$v���T�\yVD�w�����m��t-�Bh�����֙�%
ץ��mRd�ߥ$��uA�ѧ���n.�h��t�P|�ȴ�4<lϝ������u嬯�t����/�[�$�����s����W/
E����[�<��D-|nq�%۷���=!����EQ3w�����S��9b�Dq��v\���D�����x��n��E�T�%���ɴ�"o�kC�t�z {�vP�Ą�1	���ͤ���ej����W('u����[�#�;�����I_��Ļ &W+	K�d�ȹ�n<܄�w�KnHݔ��6��������d��d}��Z)��D+L0pao�D��;�C,���$Vւ���)H�o��L��td�$z*~%5��H�؎f�E��Ə����|��RE�
��h�d�eE�A���
+%��W&�_���U*R�)�	uՓ��3�z9L:��}�<pg�UI�
eUN{���^�9"��˝Ō�(��8F��}��v���S�Ŏ:��;�#Dr�>��tC�,��ؙ�|�� ���,`$��85���y��!��=����"u���M�#u��$�A�9#^C��-5ѻ��˭�4E�B�Ǎ�Y8���?'�s�9�0-b���<��.��%Au�����
�B���@f
C5+�'���F�;�|��;�P��ZKF��ET��
D��OW�����ۜ�X��i
���W���vr��CZ�g]�'S��[e��%���[e��s�2A�]���qu�H�\����V��_�z�.:A�8fU��li��l�ͰH�T�m�6I�n��j4�b�o^����q�D5���9t�#��Qz�R=B�y�}E܎s�S�~%�x��ח~�S���[x��e�����,B�Ռ�Y���5�}��P�����n[[��"�����v2��E�%��D���S���K����i��گ��%a^�Uh㈓u��
KWv�������œ��!�I9Iښ�Z��VD���"x������^�t����lkr�h������ظϟe��m���ei`��E&n��d|�Z��E�a8�=�g��oB��U<�Zy����.ֲ>x���u����b�y��[�1���g��|�s�)Y0��RݫRvIA�%��	��E�ŵ���'��%	o�w��e�Q��G3�U�6|9�?˕�\��T`��5㤰 ;O��5�a�%��	��1}#�����ev�
��F�5�
����	��u��
C���gX�]�L�b����{���:x�T�u�=[εޅG�j#+����& E����U25_3+��eX��S�-�U)�/.��o�5�\�����RӁm��>ނ`Q���%�D��r����0�d���UV�PI A�W�$�5񵝳�5�C��u�G�q�56�ŋe*79� �uA��a������%�}�o�%����}��E�|v�CŸ���=�Y���&�bq�����"-�ʷ6l�Da_.�g����% V����g
���JCv���&
V��;�J"�
�t�F����a�UtV��x~�
V��'�q=��� *�FR��wr���ȋxR�gf�-�����v���l#�_�@��� ex'$qk"f��&n,�D$������(V[��KD8*v]����*fAg��q,�
����ƥ,V��Z-���.V�^%�P_0FZ��!�0v�2�]!d�2�:�F�y�1����O4��R��E�0f����x0�{�69+�
9F9q^ �/:�M(���;�a��$Ys[@�<N?^A��@vC>(�m�Fv�J�=h�JK&��D7�)KVD�T0�
\M&����_\;N�dT�ÍO��9�Uz�K�V��b�\W6�����>YFԖ��l�^�'�R/~�a��:\CYb;)���/�c�����\|f��A��rtj��S.3�:�k��&4��}lV��>�W�m��.�;��p��+�9�qqv�T�����pS�v�ލs6�y#gr�;������uv�
���w�q�*ˤ�{�x���L��H�U���F{�	U�j���n��cԅ��-��*��~��+�ۋւEG��‹v�`m��=���#��U��'�,D��f�˭	���h����f:.xN
��Ωz�]�������=��G����BP�F�����j|��`����筥������æ�J�`
��)�F�`#��֌��=g٧Vv!]���Ū��
Yq�eҫ���b��H��9?e�6�r�Ƹm��XB�EP�I�6��z�?0�f�;���M3��'�!�M{�����=pvP�V�|��ʽ���w�c��ƀ�, V��vp��`|P�&�mPs��i�f����
�#–!�����Ö����܁�ɦR���a���r��۸��֯U�V��F���8�`�ͦ��™}��6�(�TdSI��=ۇ�i!��V�����n���F����F�7���Ѡ��)�)S<�ߦ��Q��J���cZ�ql���-�c8-�憞�^\��<�_~N���fV"j�%�������E�춠��K�@��vj���G���"�i�S�Vv*y����V���.)���v�=):��Ƙ�f�).��
�)��H	���pZb`,��co̯�#��q�/I�G�˽s�a�ȕ���H�����υR���"�:�'�<kJn	���r��Vo�
���Ǐ���^���?��0
h��2������������oGT��
מ��Q"(����Ykl�4%����'���iٳ�A�+
���
�D��\����҂q%Wf�h����Z�@���7W�c�`����Rmy�'ל4���Ew�Ln�q�W����6P����C4��퐀'��rP�G��P�LH�!G6	��'c"W�s���Ρ!W`п,���$�c�a�2v'g�����[()7�*�*�/'A��qL0g�k;���%2��iX@��3�b��=�r�87iL��zH�9g(D����\97�D��5�c9Wz����<�����G�=�������=W0�4�6^\?�������<wů^���BwU�G!ZK�B��e��7kEW���I�Xv��v��Jw��Ub8�M7���o�O��h�-��Rgҝ��g�S������f�T�5��h֎�U��ޚ`mV�{9�l�V�ہ#馗�UfJs*��UW�-
��ڊTG�\�r1{�\��+��څw]5h���A^��k]?	]�^GE�"��'`��a����b��Ϲf'Q[b�:K
�hd��x�|�eX�'��oeW��,u�h�
����kˁ,И��l�hMI��J�qW}e�v�.Or�$���&
u��3�&�1�w������{�ٲ�l�^|W�MpՂ{WE�mꆛ�~7�:`���}'��DW5c�g6I<9�p��0��͊A���F(��zI�{'<.�'jSU�����+ě��!%�G_y�ZQ�̋����t�v�����0L��-��dk�W?BW*Lo�gk�ڋv����I�N�ߠ��	����6{������#���R6����G-��'��눝���\�g�yu��4誧'u��vG*�����#�L��WW��À*�w�栨;�G	�6��Ű�'��9ܷG-r���m:�g���9u��w�BH!F�L��d^�;g�*�O������%f>��\
�����7k�FΗ4O�veP~�w_�đ�/��A���Ģ�GWp���8��g)W��C(����R��׷�juv�G�C%�K�Tٗ
<�����w���V����f�h���7����h���7,{�X֦���"��Z��9S�&;��g�F��s�h����lJ�CJ\�1�7�>R�o��uL_����w��kJsr�G��S��g�
,�Ze���;�L�l3��S�`z}����B��h�Wxeg���wV�/Fn��|�"���������	�U��/�ʮ�����j������ss���Q���̢�j!�SH;�Ea��{H{%�`����e
*�^0X���]6��譝�B1�O�%�f�v�(�z7�$[
(�Xx��w1����(Z
{��C��̉b�E8������(�!;�1�țP��h"���<�"���[�8}$�3��� E'�J�X,�(ȿ6Zy���+ضh��8+m,��|��z�-�K2^!��5�4�O>�m5h�h��C�6��s�e�98
�,�!}q;��u�~��<�m����<莹���n>X����r-@��
�ӟkC�eD��Dh����E�De�HQE��v�b�G��F�vsHEx��U��ÏI������JhIۊX\W�E%�&H�U�M�*A�S4O������Ol����Q�k�c��Y�Q(������&S���,�K�	XX#�@q�"X8s�[���\x��.X�]��dX '�\^x�ͷ�D_X�|v��`8�ڱJzd(��^#o�e�T���ri8,H�(�Ȝm]��4�nH�"��<�o�l�y�Juqh��>e��v��Q��C��w3mr���x(�4�Y�z�߰�G�%�~h�)��Q�7�8�6�X�zb���Kb�<�����i\ɥ�(����F��X��N�e���HR�zLkm�8rr�����(�����H2��Fb���"��a�a�r���.]�@-�X�/�ƫ~Ԛ�yq��2�����޽�1����Y����H~���:.��S���?J颸���:�G�h�<����&�ؽ����[��hIR�����=R������4�7�9�5���8u���|c���\�@׵ر8�z5 ���2��h�?���Q���-��E/Jy���6��Wg�xe�hm���G#Y
\���;�<N,�X]���y���(�j[{Ĉ��d���xD˟��q�H@�.5��e�x
�Г�����40�̍���"�l�������0bIш{��.�����]D���4����'�-Yظ�Oth���ڸ��zN�����=(���&ߘǥ���\ ������PJ�8���9N���H���j�b�Xգ~^U�樄� N��h�V����hg�������k���#,��fQ����(���"�:��H��b
k6��h�M����<[��J}��H���>סA�HYd�
���(�KG�VP����}cYWT��X5G[(/&���\����8��a�ԭL��:�YEʅ��.�7����TN�>�����D�?9�(�#�rk���	?��G�i��4$�89�i�~�a	I�>X.2�
8t�#]r	N�HV4�_D�b���#��������Љ	���&~y;0q�tz�Y�V"'9�O��z+t達���ƿ 9��b�#%��E�����(ߗ{f5��-������y.�vsI�޷-Y�|cZ��w19j����3�l�)Ct�~8��ʹ��>8�A/Dw�P�<�[*u��E=Y��� �>�9r?�"=�����+��<��W{l��B���b�zDi lh��(F9�S6Lc3�G9:>����Fɮ���F@�G���@aBJ�Yi[q�VK���љ�G�Bl�GMi(��!_�Qɉ��`�R��?v��Q	��R�#��T����\/�W	�@5���'W��	C�e��Z9
����[�b�5/r\9���ً�\yC��[��b9�1�O��tc	��jQ��d9wv��d�O�Zs�B�e�G�s�4tfi�ѱ7�/h	v���JtzhY�$�k�7�j�W����њiiʬO�f%�b��AVZț�r	9:�Q
 s�Z�vn4Rt��g��NtIgs�Y�5=u�
�W7��|y^�⊆Z���.���gC�)��#h^�X�y�i�`���dKS;٣��7��¦�Y��Ԗ
���l���ľ����s<Y���8�leU�)�	J�q�
�������3y��Ӆ=��9���p�����)�0,`Ǘ�2kUB|bS��3�� Ɲ��ˀP+'����B/`R����x��k��)�.�w����~s�Ҋ��?�xa¥U�I��WQZ˥�(9����}�!߾������nª~	
��_ثɎ	�Ԟ;�iI�	�%#
���0b*�逇3��0�ـ�?ҌӉ�)��y��F��y:�Iڪ`E�ɶ���M�.���y����@���#K^#ƿ�I�N�<��V��o���	0����;�™4W��RÉO2�-�����(�J4@\�	50��fw��cJ����I�I���ɩ�������Y)�$���H��c=^�<��C�!Q��b�I�<_lй"k2�kG��yQi��Z�q�g<�	]E��Y�K���lp���ui�G�i�d:=�	��}۬��!dgH�"��(�s	h�9�žV��B�)]%
b���iB���J���N2�U��y�~�G�.��e�=����94���
��	���8-���ͶG����l�x?���i	��5������d�Eل*���ۡ<���}�Q9�w��a�
�k�|5'x:P������"Fi�Y�	��kC�K
ʓ-$�--�.´���
J<�����:�a�}�?��C��������}'ډo%HW�:M�h(���p���wvJ��	��z�ӆ�FW�'��7Yzb���U�*6;��抣 ���X�� ����?C ��wZ?Un��$��%��h|$*A�E��6&ZŹ�����&��\ش'����C��?$[�`R��*��9��8��-��D�|���.��&׀q�.:��K-�$.�uY����0��;8G�Q2Z�t7�
025
C�C^�~5*�� ��:�M���w/f:��5�O���?z5�v|y��A*DӴ�UjA��
u@v6F*rW>J&�I:�*)���L�a�o�3NZz:�ՓmO��j�-s_P����wLpP� �F���O:����<,R�ά.z��P�� Y�y|\Ujphb�H��V*��d{T�kY��($SZ�����}l�Z���\���Y�ѶXh�a^`��5�f�b�fZ���]B��g�uh���@lj���,{p:Ƙo�ڜq�Tiyz�t:�w1��t��԰��it�� }����x��w�ҽ�I	�̚;�:�:�^)����VS�g���˝W������b���j�ڌ6(6��L��Jm��k��zBģ�����Z�$?�{�*,Ǡ�;���ea P�^�ꬮm!�ߚ���o��,�:{^�/��Z����0���)�M������S��D�:!����0���HyӅ�t���qi�bJ�Jy�,�֢���X�Zc�Ҧ�˼���]*���Q�͘�J�-�`��Z�Z�b!��w��j[��E�Ԫ�����C��xLֺ1��z��s���Z��*��ֱ��V����Y�J�QT�0ųJ��2��ִ
��Q�DK�*l��������P��e�һ�ؕ���{���a������iI����7�$2�+���x��3]��i��qe/�z�B���ӟ��1~�mpMú��_<�<��Z��x���Ċ!�4�f��:�_��X���:�3=�?���*d)ar�����3�y�	��
�8�.��ʎ<��צ�jՓ�ܨ���
�1���7Κ}2�O
�F��Inʓ���Õ�����:�w=&պ$�e�v
{ت����5V��ƪ��1�d�:���h�ڪz���x��
v=2'�;��Zn����Ǻ���~�Z�[�zQY����F����U5Pj��gF�r���z�F��bE1�
�Y,��� ct����m��
;��@8�˺���$�K�v��
B2T��w�j4<�J'H
��߅��+.��ꂲ7!���J��:��jسT�Ǻ��d9�u��:�d3���*�Ck(����.��}���XH*�x�k�q���|�։�U�d�K���E]۲J�&�	;�dz�p9�	���S�v	[���8��+!�`q`�[�g��V�
��#64RM��[({�X�%,�VC���8^5[�k��!��T����[�]3�b�w9"��r�<!��r~/ڄ��������'��166�m�(�����)jc�P7P*[�8��+�+�>[/���:)ۀ�����.� ��˻�/K�@�N��L4����T�M	5�xB��V��5~���e7�#�E�E��6[�s�1+�;��x?��<�^��/eJu@�ѶJ�!Z@��"k/B;����&�C���m�YSD�DhZ�h~B�{�0�n�F����R@�$���+G�}�N4��I��sn@�J��ݗ�gI���;����GK�>��V0O[>���S!P�\���d�Q�I6�k�ϘR����hU�!w|X�:�U�p/���W��!wS�X+�&�����Y��sRP}Zs7�����V��Jg�h^`;�o+���`�x$��7c;�H�!6Ѽc��wd�f+�
"���;h��F�N�k�f�a���w+�KO��_�x�Ї35<d$~K	������b<F�>��������z_�����a&����0}�F��{`iI��[�M��|`s���u�[.�M[����☋>���<���kK[z�: ��ѐ��|�k)���qFJ��2�����r�V��϶�k��7 �X��9x�W�����n��;���[|"榫�z��D[�_��2�#��8���8{�K�X���c��j(��'��;�1�%H4�{q��"�e=�]*��kΆ
�G�����L@��E}���qBgC�m«Ԭ�0Q{��[PѦF}�ċ�$��H,;����f=]���1�L�ϩʋ���;B���K��J�u���
RcZ���˫gQ3~ӻDn�$e�ۨI���(�Kp*@��F���;�[�|�׫�&p#I�؋�Fa	X���ig
w��x�[� J����ۋ�n�Ddp��[Ȣ�
������S�.��[|���]*���m�
(���+����ꈳ��%��,�ň�[�s��>�s�[_n�E�t�+.Њ}�,�{Ѐ��)�v�M�(}+�[����i�Tr᥉�黵���L�����Ɗb���
��x9Z��%a���Z�﫞d�58kj�[�����P�[���M+�jsM�K�K�K?A��O(e�{��h��"�jKK�>���q�0��������NQ$P@j9\	��M����ǐ+&XQ�Lq^�K�����[	,|̾<��,yKP�],�U\U���@Omԋ��z��,���(�a��h���B�'H�l���'��;���=��ބ���I;�L�>Fv��|����~t��s����/�̤�	mtL�O��jU �Ҹ��*�!l[��	�X!<r�R7f�&l����6:|(K�A�H)+��8�-9)<0A�G��)������6,���/I��-Lg��E�~�.�@M�}b/�F�-�b1�/L`(j6+2l?�e�x){3̙�'%7?4����Hw5��D��U��4�;c*
r:�>Z�n�;|r(f��<|3�}R��>���R��El�2���8F,c�7ȓG��3��/G�n�\����H�'�����K�Lj���^N��RH�ޤ5PL�H���1�Q�W��)x�R�y�?�S,����5�Q��Vŵ��V|s����LW�1�{�AiWLx�o�T<mYL��'cB�Z����#V�[ܜ�Z�á\��r#�b�=�	���e<���v�\	f\՗�xһf,��E�i�0�{Gs�k��A�l�T�&�XHm,�����@ol�M�VMu�s���/>��w�z�{�O;�w��!�yE�&��,���|��^r���x���U�,<n������gH}5}���LV]R@�f�������咐��5��Go‘�L���S}��Lx�S@e��l�C�R�\�YK�=��L�'�[�!���.�qp̂��Rgǃ[��\$~��/��\GL���������pԁ�"�|�
}�S���������u����"�Ph�l��C�*2��?�O�+ݭ<}�E�H�p�\[{�H�^�����"���ܨ2��A�\�iC��u�|m#)�y`�#�X,�,�kH���H�<����U�O�,��x׿��\���{���%}��X�<���8���wk/o����<�������,��~�����Ƽ�SE^��@WT�;F��,��U ����Z5O���l�w��/��L_C6�|����4�lP�<9�tIG"��<�qa���\�h���ݬ�
������\
A�o揬�~n�d�'"���CT~�q��y�8���|O�p�P�#����e����Ǚmp�3�LKoD�D���\�������BSr���3���!��L�}5n����<D�E������S���s�\r
jVn�:b���?C!�	���X��U����JX��Z�-�7�
�"�'O�m��I���=�k�a������'������r��c5�Ӿ���d��Fp�B3�
q�!��a��e��YU
��PΒ��q�˜4!M&���z��&]Oij���'-_�V21��)ͦ&oՍ��*�7��{Z�/.m*PD
��y0����:��2]Q8g����6��NK��LU7݅�i�G�)9]���1m#d=���ӕ�q?�x��Pz��@}X5�c˟?��a/:rwM?�qk�X��~D�w�"���zL=v�:�$NڑNU��VOͦ�r�/YQ�^PG��WS�Vkۙ\7]��أ�y��a�аd�l�c�J�p�^
d��%�9��HgM�ixB�iݚt�qb��l]�'a��p�'��/��p�O,�7�p͆+��}~u�g��^w���`;}
�y͉d#/�L}z͓>�7�}�yM�8���0���-I��۸��=�"�2MR��Dz��/熍��6Ńc���&�����}ǰ#V�����B�}���M�B�UЎ�8�V��r��8�F�T����v)�Փm+�_�Y�������3�ܓ�O����8��8?�<�Lh���R\�r�@��4�Y~�p����C.4:_�������Mp�'@o����n��L��*��R|���iA'ȃXm����d>S�ƫ�p�/�dr�
'��2��ƶ����M�L��}w~J�TO���#���'�ݧ͌�~��-p�0���ֽ},�jX�`�=��r����$��jH�mA�(%���m���[���s^�����$�2�,�~���P;��_y�]���53̝�
�:e��Ӷ.u��5�=���LM�<�m'��G)��t���.���=�\���9��-	��+�ؽ�w���g�m<16'�]ys1����=QY����2߭�����:�}ɽD�+p����Y7��ك��},����h��N��g�M@,���!��
�F�U/����rwz4Ja!���x]��M,�6�fV��}�����|�-���W���݉W�y�"��]����.�*Z��Xw�]C�������}v��gtE���/&�W�����3�$���A0_Æ�N��VhA7�G2x!�I��Wd��V����9������t�Z1{��"�_f�&�;.��mN�tt���~@��uw�n��X"}B�����M��� ��J2X�X .�KAy`�#�,��s$>����B��(>O�w�.~�����/N��M�A0n��%Fk0n�P�/*m�5^:w��L6�8�pHB�=�:δ�и�;S�n����<��4G�ƨ�C��r���
E��)��ìG��A؞�J��4��^��Jމ���(]K^���E���M.t�cs/�aN�U���܁O�%`����L��5�P�T�Q���9�2��Q��ӭ\���S����x->T�E�OĔ	�M��L1b�V~^\�T�
�W����Q6V�dMI�T�O������)Z�c������[>���g\~W�K%��^>���W���^�6�:o�#<c��͞!�fOf�K+���gn�����h��*��Pmj>re�ƫEm�P��6k=�p.�|��c�u��a&%(�Dv��"EdvC	w�	�/M<ly>���n�W|^J�0qq��~n!���c�~�wR���H����.��(5~k��A��.��p��X�2�9:#����BV3�{����gC:>�n���s�.��kqt���N_��gt��^�<�P�K{�>q�B܆p������xTԐ���^�v���I?�O�Q�N�m#���.�T���D��띁m[T��R)s���\����"&����,iY�d�>�8���k���q�ڛ.���D��K���H4���=����,�$��>�[�vh�>�d^��
��/�Eۑ��nV�hY]N�+>БJ����)Ί,��B�U����^
�n[�F��'�
Ǥ.��޸q3����>�1}z�k�~�y5E�eX"��T��4�@}kv�ޞ	�B~B\�n�i�V����‘�$��w��9ã�.�x��n�/�n��zoL(R�nt#3������<5�ܱ�n.��֊gK�n���q���®a�"��M�~�*�PG�N�y�9�Sžn��t����;�F��@ǾR�����ǾEb�Rj{��~�6�Lϱ�ɾ��y6Scˎ���Y��H���x���(J��8(�i�~�j�0�N��n��[Lڬ�>��S�Kj8��1�υ�@�>x0]p���.�
�d��A�]+�dڮ���r�3Sٮ��f�?�K#bT�p��ހٯc`d��N���K��6������cv�>�-G"������)�/���`z'L�w�~aE�,�|枆˃8e���N��{:b��|��*Q����Q�S���X��Po����;�w��D��XC���~\}c߹o���J�@���������m��|?���R��jaZI��}���
�+���|�W21��d���)��Lj���4����i�X=�XN;ǹc�>��
�Av�d�������&
o��ž?/����3s�r��<�b����W(Q�SB�ȓ�m����@oa��C���?�G����h(�A�;4(�E?$��9=��"�%Z`{/Q
��UO:6cVnV���M��7
�ΩrjBu���u!�o�V�#_�v:�A�$o��8#�C&?Ի<�o�Q,_I�v� �,;��*��.���T�Z�K/o��L!U�1_	���#d3��y��_�5/�JJ��<6�*��)��8O�C��`�9�������>_�� �5�"B�|��s�C����"r�D���,�`Com#18n��E���e���D��׎���H���-F�$WHO��p;0�H�*@�N��I?f�r��HL/R3���M�c��bZ�N��g��qGO����iQ��4���Vo/�zo�E~W����vB
�V/�J:ǎ[��qo����]O����cO{�5��c�ZS��|eCi���`�:�j���~��H�n/NDl��o�M�����o�����ܯo_�M��FD�qz�UG�AsWCm�ώt���so=3�Z���s/��C��Gx?���e���|O'�E�<���Bu�e{?·�V>���7��x�8ԍ�t`|�0�Owc{��k��������b�6��:9��/y�A]��є/^	���O���}R�ћ�'C3}����o��,)$]�O��7e�� ���V�?����������ϧO^��<��o��G�O1 1��+�x.%<�t�����n�n����������&w��
a'��(*tϻ���G0>���3����ow��Q�Ү�/�������/���y8#���pW_K�ϏRq+�����:]�N�)ԏ
�E��uտ��]	Q�Y�ʇpeW�׿�<{}�M�oR�Qߥr��/�������|�(�0��{��X�/+Ρ�S��=`N�Z)^���8M9���Orr�ˍ����0�c�b�oL�Ʉ�����N%���?�w��T�!����0�&����SP��R��@����8:���V�JqbZ7��Zp`m��Kg5vY~b[�T���cn��!�����8����L�	a6�����-#CB�x3��c����Z�`������r8s�F��S���f���)���\�U����
������B�eo9�q,N0o�5p��
���]4d��$�����H�1N_����Y2���R'���E�������J�l�<���N��h����.Gg�NOtb�x�U�����[��{w���������0����f������"D\ZO�9�����&����I���(-@���\�m#��3�}d��}W��y��|�G]RFb����V�\:�q�]�; ��#�����J�"������f:�0e��P&��=��������T�� XCM�2(a"ZSp;�'b	]"]e_����
W���<�W�"1��0����fF�
����������r����n�_'����w�.V��(sN5����(��|����������Z

hf
	*V1�XE]t���i%]c�~��3
c8~��1��.��t"d��������������8S��s�Y�z�B���'!xg'������*��E��@�	w���g+yJdKRxbBH���C������,CYy@g&P�����.�co��uS�{4���{�RU�����n���T���g��4Q�6Xt�,��5�
E��X���%3�O�����>8T%Oss$BJ^��"������#(dDU��Q����h>����l��pB�Jwi���>����q��G'	w	D_A<
hA<xRKE#xzBji�����Rud(���������9�T���;�~��k����.SAjs�Z�����kS��0s^��L
P�	b L?J3$@8;P$i%$U�]����%�&��������;�����+����',z3����j\��������f��,v1�0��$�a�}p�t	���=w'Rg���Y���~��\4H�*������
/&D��DQ�X0ReD�\s��-W����HN(YL[��8�J*�B2������G�Ij�Q:�Kb�n0J������P�����[C��W�7RFtp
BO\4PS���b"����&�AI[1s%X%���#������J)��+<����^f�-B�1~xCIG��?(�]�`@Z���w��ZY���^5����4�J.�n~k6(��c�|�t��f��Z>m�������"a��`l]��=b�+-y��������d;�v�{���&��
��n$����&���	��vv������` X�*��I�8'p�>�h��T����0u�S~!��������]������!���a������my��\���������-���n��c4z.pzNl������j�����X\���n�����)��G<~Xo>��7g�������)�4�/Ny���Iv��6Qc���������020���^k��}�fF�nw�������z���.��R0>|����}3~��<gg�W.�)o��"��c�ZY#2Ir��>��O���^|�����sx�n]d�j���wd��J��a<�r�[���r�.Bw/�ghDFG{��&J����'����%����Fv?BM������c�K����r��n��c���)V��Y*
l�F���l���$�Pm��
���?�"0��r�y�T���������X�WJn`D	HR������6��"~A�HThx6qvE�����w��*`����m��Mj����WX-���K�Ak�B�}�o������S��\h818edEGXfZ{^#EG^BIJ3�gD�Z&eZz~9h1��j������	5�|Z����&""oTDqBW�K2�
���;C��{�4��NFIo=@%.�45ds�g
C|�x��@&����2N���
���l&@d${M���)b<�������}5$P���M�H�������D��<:��E�zQ�\���9|!�/K��������.������5'k8�+��sG!O3�V=����QR��M%b&e�ix)m<>ihwb������2IN����U=t;�f���L������Y�`��D�s��%��4>�������GCR�g�:A\\�\��O"tKzmF� �Otbh`����q��E2[>X���s*���$���xF�s����(6�X��������%�{{M�����)��9L1x��8og��~�t������j?{��BF��:	H`�����|#@�gez^�x����H"�E���'�u����Rg~S�Qd\Q��xN���n-D2%�>.rs*���f�4����:�z/�T�F������Z'Jv����"��K����9>�p�v����f��Ne+�a��)GS,{Y���k{�� �`1S����g	c#hW`V �����s9y�����q���M�4%��w���\��9{WU����B8A5�e��H`GND@��Pv^q�C��]����nJ��e<$+D+'�%O����e1Ne5���4��%P2��s�2�b!��'���?���2���Q����[6Hk��U�M5^�#a�W��0���FP7&8�ix�txw-�H_\f}o��"i`,:��Qh���~����i���+����f�`AxV4U��e[��������t4����
���c4��;j�L���������H�ev��%b-����c��2W@J��$8�y,��^�y1�<	j+�(ew�^(��J0nr<a!?oNg�/rKI�{�`]��MUjhL,X#w1r��BYYJ���!��������,��D��O�ch|hn�������-����xJ5r.9o����N1-P� ����`!?P9��vd���[
Sm"akwa
nnR��VJI��;Q%����7�$U��#��3�����������%C�����B�q�����������&:����-�O���-hQRLL	}I�=E��L��,�����������C&��8Vh��y���`�)�3�$#37Qg>6Nj97h@H9Ic��x02���L�[9 ~%F\�������KH�/Rf�<*�=���c�f��HajKfN\sr���k�QmyzU&#�&kl|"���-]�q������N[V�5��)�$B<
S�fX~WS�����^��Ku�A�O[�&������M������h��}k���7���$�.{�W��<T�j	�&ei���������g=�^�5ux_r5�������Zq�^�+�v-�;�	f�i�������4����� 7v�<�HgL�����7Gw�������[������G5v�^�t-�e5����Vl_�88�k[R��s����b�E���(�I����'b�p����|,05�E�������x�Hr�(�+���������l���h�i���:��y���j��3�w�2�������$Y[�X�!�w�I�tIU`)�}��J���Z8��7`��� lu�������A��z?����fzz}
Y�9F(E���[T��_.���	���<,^,B#;<{Bh����+�u-��\;���� ��M��2������������B@s �S���w�%��Yo���'�����{vB(���;��$�{o������|�o�[��Wzvyoiej.
&dyXs�Sk���f��%�2��L��>����0H�@��|�)Zu��X+3@�hi�{u�$w*N)NqZZ$��}2
+c�U^�[�����8[<��,I4k;�<jwQM]B1@M<�5�I�|�J�Dlm�SW{00�e��	Go���T�z.�
��d��WP�R>Di��,��� �V|

ILlDvtT���;Q�]�����}B��<�%�!h�������wf	UkTb l~qF�����BZ��8������R)����Fs���"&&T!On�m���b�����:�������M�:1u�bj����R��!e����[}���r��������������iP;�������G��R���q88��.�GF�C�����b_��������>�g09��&m�;�K��I��)�P:���V�JqbZ7�*/home/palash/git/iron_learn/src/complex.rs� �6�BI\��������j�8�QTCOOEGB516=$%B`WA<B1113M2C<F!>4! A./!(0;#=>
!N,+!((1&(7
2Q12!((4&(7
'K24/!((7&OT
.DC20C!((8& %.3!!!7#!(7#2�-�-��aJ��Lk�_��^M� qu�����	�
���
�������������������	 �
!�
"�
#�
$�
%�
&�'�(�)�*�+�,�-�.�/�
0�
1�
2�3�4�5�6�7�8�9�:�;�<�=�>�?�@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~�������������������������������������� �� �� �� ��!��!��!��!��!��!��!��!��"��"��"��"��"��#��#��#��#��$��$��$��$��$��$��$��%��%��%��%��%��&��&��&��&��&��'��'��'��'��(��(��(��(��(��(��(��)��)��)��)��*��*��*��+��+��+��+��+��+��,��,��,��,��,��-��-��-��-��.��.��.��.��.��/��/��/��/��/��/��0��0��0��0��0��0��1��1��1��1��2��2��2��2��2��3��3��3��3��3��4��4��4��4��4��4��4��4��5��5��5��5��5��5��6��6��6��6��6��6��6��6��7��7��7��8��8��8��8��8�0/home/palash/git/iron_learn/src/examples/init.rs� q�n:�D^���sx~�#m#!%+;;?EFH@DGCE4IGH?EFE>X/'!
%#GC KD
&
H8

:FGFBB<A@FE:,B�7(K:A,@2@I�_��������������������������������������������������� � �!�!�"�"�"�"�"�"�"�"�"�"�"�"�"�"�"�"�"�"�"�"�"�"�"�"�"�"�"�"�"�"�"�"�"�#�#�#�#�#�#�#�#������+��~�&/home/palash/git/iron_learn/src/lib.rs� ��UPJg����5e�S�O''.P P
P	P!2PP&'PPAPP.0PP\PP,PPr�S��j���M�{���1/home/palash/git/iron_learn/src/cpu_tensor/mod.rs� �d��;&��wQ3�C��=%$�[#CC( & ##)




u 
5>/+
:
%JJJJLWLH!E0K<+"O
#%
++=I<E.
3 #D%�
3;)*--
'LS
`"

3

E9
3)�
!>$.%!=% M&
""%'9% M&
""%'=S*5;K*J8+8,HLO6
39+q&
&, '
'
((>�h<PY|'#NNkQ�6((>�m<WY|'#NNkQ�6((A�v<Ty�'#TW~L�6.F5I.?0D 'L2%K2)'G#G($'.881848B/*86;8;9='$<-8)7(8)8)8)9*8)9*K9��������6T'�1/home/palash/git/iron_learn/src/examples/types.rs� Z3u|(�-S��nE	�m1#%))4;E@:0I! 561<101@1-0!-81&-*%&�s���\P� �|�Ǘ2/home/palash/git/iron_learn/src/examples/n_gram.rs� ���E
_�.-�R�����m�*#8/3&$$%
)  :`022?4DA9>C7AJ;BADbI'$N$ ?/-J#-))"1-J-J:1
FM"NJE
'&&$$..`
a9<P= ;OLI)*;$AHK-GM#!'N1.;JJ$5FFB3/&"-6T
J- S0)%#� ).*@)& )<J$G<.A)20%/<> 0
S98:\4)-< ")#-$:%?&;B)V:,87$V-!8(7!,""#!
,5;--!+!+
OB8
8
8!#8*1LG-M(3;/+8?D%5	�]�]~��ޙ?3 �c����ʟ4/home/palash/git/iron_learn/src/nn/loss_functions.rs� �tx4k��7x?3ܩ�X��%#%0W&@BGA&576@G&121>&$%5I./1;:>/"8
/D&$&6I7;B;;5>&&@.17"/D&$2,;�]�aD@}�S�6�����)/home/palash/git/iron_learn/src/nn/mod.rs� �����bni�W�c̵�SPPPP1#)JFG)#()PPJ8D6PPPPI#PP���@����!���uP�1/home/palash/git/iron_learn/src/nn/activations.rs� a�D��P����.B��Is�"�%#%#J0
	

CV&8/&OB0/8322N82#%5&C<2B02&>92+,"1&A22>52%!#"":D9A I-\H(#
%(C<2$��R�	��Y�?em��j,/home/palash/git/iron_learn/src/../README.md� ���^S8zx
���Y�Bdݕ�ld�.>9�VPN�1WW!2"-%*!
6Q�Y�5/D
$!�WW!2",%*!
6+)&"A[[]B><?5,#"$!!?>52/#�.A-L-LD;Pc,Go)�~�t7;�_��:	����"3�b(^_�!KApRhbRuk#���'Y��Fv"M9L�e"���]��v#s��?re{7	��	��#H$zn
�_�_�`�a�b�b�c�d�e�f�h�h�j�k�l�m�n�o�o�p�p�q�r�s�t��X�x�2~՗V���zn����������	�
���
������	�	�
�
�
�
�
�
�
�
�
�
�� �!�"�#�$�%�&�'�(�)�*�+�
,�
-�
.�
/�
0�1�2�3�4�5�6�7�8�9�:�;�<�=�>�?�@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~������������������������ �� �� �� �� ��!��!��!��!��"��"��"��"��"��"��"��#��#��#��#��#��#��#��$��$��$��$��$��%��%��%��&��&��&��&��&��&��&��'��'��'��'��'��'��'��'��'��'��'��(��(��)��)��)��)��)��*��*��*��*��*��*��+��+��,��,��,��-��.��.��.��.��/��/��/��/��/��0��0��0��0��0��1��1��1��1��1��2��2��2��2��2��2��3��3��4��4��4��4��4��5��5��5��5��5��5��5��5��5��6��6��7��7��8��8��8��8��9��9��9��9��:��:��:��:��;��;��;��;��;��;��<��<��=��=��=��=��>��>��?��?��?��?��@��A��C��C��C��D��D��D��D��E��F��F��F��F��F��F��H��H��I��I��I��I��K��L��M��M��M��M��O��Q��R��S��S��S��S��U��U��U��U��X��X��X��X��Y��Z��Z��[��[��\��]��]��^��^��^��_��`��`��a��b��b��c��d��d��e��e��f��g��g��g��g��h��j��j��j��j��k��k��l��l��m��n��o��p��p��p��p��q��r��r��r��r��s��t��t��u��u��u��u��u��u��w��x��y��|��~�������������������������������އ�߇���������������������������ٌ�����������������������������������������������ܕ�ݕ�0/home/palash/git/iron_learn/src/tensor/README.md� _]�BCMtʏ= �n���	(WWY����kV�C�O�	
23>?ST\	w
���
��������������*/home/palash/git/iron_learn/src/commons.rs� *ա��WA�vme�
u��#EIBS-8+)C
6DN/F"6 )C)
4D?J",/$"&/
-3/
5'#O/IM79*
/�X�I
p֎ʀ�A�$1/home/palash/git/iron_learn/src/regression/mod.rs� zE>6�iW���
�3��R;v�ۭ���\���t�JL>/home/palash/git/iron_learn/src/regression/gradient_descent.rs� ��*|������-�5��!#%3EA^2L&!#.=Ш|ϡJ�ڂ�1��e��!#Hcd�����	�
���
������������������� �!?/home/palash/git/iron_learn/src/regression/linear_regression.rs� M��ysP���-��m�'#/#%
<?2<&V2)/'H9��O�7yύ#���k�A/home/palash/git/iron_learn/src/regression/logistic_regression.rs� �$X��g�fm�F��7
X&
<>B X2)/'OED7A2)$&35,D$�4�d��C�Z�/��V|7
e�������	�
���
������������������� �!�"�#�$�	%�	&�	'�	(�	)�	*�	+�
,�
-�
.�
/�
0�1�2�3�4�5�6�7//home/palash/git/iron_learn/src/examples/mod.rs� ���b4't�DF����&+ "͹ĎԌ�8,�9P�9/home/palash/git/iron_learn/src/examples/build_network.rs� ��d�3��l�sv1��0!#%+M+%< H 9&0J2B#HAB
)_�����ii�%j�4/home/palash/git/iron_learn/src/examples/contexts.rs� .�����{��
����+�!K>+7-3QM!5RKC)+P
*-+7/LEPLGw�]5: "!(#.]Z*-+7/LEPLGw�]5:dR..0&')

# #31%!!) '''[$Iwe��ׁ'ŝ!�XQ5/home/palash/git/iron_learn/src/examples/read_file.rs� �)�+	����9�����6
4@GFR1O@=%
)=ME9Q
E>
��(��NPn��n<�y�6/home/palash/git/iron_learn/src/examples/regression.rs� w;�"�S�H�Z��S��(�
BT<B#GLJ,0222>
`%227752>>RB!*>DA?*4K-$3)(%#C?/0-IHFL2222>`'227752RD!*DA6$3)(%8
>*2-���Xq�T������q=/home/palash/git/iron_learn/src/examples/neural_net_runner.rs� {�n�̀m��������R�/23)#% !#
&$UHLO4< 22>KK?49ADC>7D
`52!6:P)'+55A@!M=86P= ;\SXO)`,%�4<8<<1$! :$0OW-<.*@)
& )H
=>0K*.+%A
7*!"$d9)BCEK"
.85?-6
%< 271555;;;717@-c36"&%.7`L"%3
W'*\%LIj��`���<��M�+�;/home/palash/git/iron_learn/src/examples/transformer/mod.rs� "@�A���?�
��W��q�/3)16#$%"2$I*G%B1*1* -1"?`0!3JL2:4"L 4
++)< 1+I+
0-E/$0>?&8:*_.X@C* A!*[!%!p1?T,7S
).35#`0Q+I'X9;@5.5
*#-#*
H50,MNG/+FQ
)I1.+. <#\J*!'
QPA
1	4*6+?+*+$`0#34J;OOX<$H*$''P
EV�2GB!OY&S]Ge7?2F#"(.(+ !"+T3P>

$!40>
*V-?1,
H?B	1/�Y�Y�^n��d���a~�;�07��A/home/palash/git/iron_learn/src/examples/transformer/tokenizer.rs� b�E뗱6�j�ޢN<��/7-:g�3k—�#]�R�B/home/palash/git/iron_learn/src/examples/transformer/vocabulary.rs� 
c�3lJ��˥{���
3*#&&XB'W$'';!
B-1&1&	�:;�Jc?v��jWT1/home/palash/git/iron_learn/src/nn/transformer.rs� ��I�ߋ�…�׮Ip���% G'FMB<!#"":K *I3&#1
8/9-
&IR<<-$%:72$4
'%0-*#<T$" 2<!B.
$>: B-
0;75Z?N/L+$S`/
O&A
3<OV
(J)'./M'47##>_<:"(@4>9B*^1
PT#(&O-@*%> D
C
XN(2:516JH#"OINSDPY*5(1a.3(1_
0^YW),4>5)
)!


9"<($?)3("<N3e1>.$0VOMOWSSW'$`
IK87"!;H!=82`ZceNzcJ D.D.D.D95C!C!$0=cackgg!'Q
&E?,AM\F
> .?,d) H
2<)O#(R5'1BPi=$t?=?###-HL1E!@TTT"ccccMMM<n
&6-T1-:"5gX
3_-*,7pOa15gG?]!W?e?	)@:	EC)8	DT09A@G,/>DDD*%>K&eeWGdMMM97;;4;@14O&K9*3ZW*3\]-BGJ___
)'K%K'K;7,H;J]
N��� � �o�o�o�p�p�p�r�r�r�s�s�s�u�u�u�v�v�v�v�x�x����������������������������������ēȓ˓ΓғՓؓۓޓ������������������������������������Õƕɕ̕Еӕٕ֕&0��D�8�;h�E�%�-/home/palash/git/iron_learn/src/nn/builder.rs� ˪���>��7)��+"��Y�/1/.#%J"&'.< "< $?)N<>
0C5+aR+C07L&).IcZK87%"):!+C")T+X-)\+)#':%/E</&--*&+I))&,J&)",4.3,?:X=(+'%0)8!3QWG586D-4+85"($5m!0!".FD@T%/)*'_?)2Y2*VZCUGD1%1.C<b:fpc6:?_2
?4 4i &., =&�9�9�9����hZ*��3��
�n,/home/palash/git/iron_learn/src/nn/layers.rs� �f>�0ç?����X�6�-#%1/L6<N$,
(N<*1
<)#5^=UL;6=*TRRJ) WN:$+/7$+/
-<OP
3aP4%67":,HG,.3,0$
)M!<*!<1< $/
1<OA+S
UTG8_. )�?'�!����f��ܺ0/home/palash/git/iron_learn/src/nn/neural_net.rs� �����g�-��4���o�A�21#%"

&$+HFA<+$'0Q.4 (((&.
=/=8$F@L(=
#3
-(,I*$47&D)6$- & *J2+T,@TVI8$UR,EZ83-)4&,."*2 M$#/)T)2"K
*,%3 ''55';8O>)083
B^(.`
.U6O-J/.<0:#����gH�ގ���.�+/home/palash/git/iron_learn/src/nn/types.rs� ���R
$A�!|U����##$%&.(,&7/-
1@j�R��ۢ4�<A��*/home/palash/git/iron_learn/src/numeric.rs� �r�����<[��C�R�acd+ghQ
dj0Ada%Uho	#### ,+$$,%,%bCL

&&

&&

&"&

&&

&&

&&

&$&

&&

&&

&&

&&

&&&&&&R43aa&(&! "g)*
*
  Y/�t�.�`����./home/palash/git/iron_learn/src/one_hot/mod.rs� TE1��f�̮hU�[�;1A@HVB*$=+[$
61 $)(H"T4)$#0&H5+("#
�V�M�γhdRwi?5;Pdz����	�
���
������������������� �!�	"�	#�
$�
%�
&�
'�(�)�*�+�,�-�.�/�
0�
1�2�3�4�5�6�7�8�9�:�;-/home/palash/git/iron_learn/src/tensor/mod.rs� �?I5�FN�-��Jn���n*WL<LMHJSSK2ZQ#\XK?I,&$12/8
.&-$>C(&"0$.7*7$76):78 <!,$G(��)��;�q�Ҕ�;./home/palash/git/iron_learn/src/tensor/math.rs� �L�@�س��-��T4�
.#MMIL*<P(?3Q;4746'7)7*75847*8'J��{8&��~G"+,_(/home/palash/git/iron_learn/src/utils.rs� Ggm���q�t){t�]��#E.A<>��}�^u2t�Zi^|5�����3�ը��ӫ׬�����й��,�'�ʼ"���B�>���������c��}�5���������=����x86_64-unknown-linux-gnu�_Feb�0p%�\�.2�
iron_learn�-ec8b451aa0eee671��`?&�X�y߬�.���0%��o�
��
����&��&����&�&��*��'�
�
�D�
�C��D�
��
�(��
��3�3�
�
�(�
�(�
�(�
�D�
�(�
�(��
�(�
��
��
�
�
�
�
�
���
�
�
�D����
��(�
�
�(��(�"�
�
�(�(�
�
���S�����#��rust-end-file