一种直播间属性信息获取方法、装置、设备及存储介质与流程

文档序号:15444818发布日期:2018-09-14 23:14阅读:224来源:国知局

本发明实施例涉及计算机技术,尤其涉及一种直播间属性信息获取方法、装置、设备及存储介质。



背景技术:

在直播平台中,每个直播间中均布局有多个层级的多个控件,以便对直播间的各种信息进行展示。这些控件在获取相应的控件展示信息时,需要发送数据加载的网络请求,该网络请求中必须包含直播间的属性信息,比如直播间id、直播间名称和直播间创建日期等。这就意味着,每个控件均需获取属性信息。

现有技术中,某个控件获取属性信息的过程为:首先定义至少一个局部变量,如id局部变量、名称局部变量和日期局部变量中的至少一个,该至少一个局部变量的作用域仅为该控件对应的局部程序模块。然后,向该控件的上一层级控件对应的局部程序模块,逐个请求属性信息,并将返回结果赋值给上述至少一个局部变量。也就是,每个子层级控件获取属性信息时,都需要将属性信息进行逐层传递与存储。比如,第三层级控件获取属性信息时,需要将待获取属性信息由第一层级控件对应的局部变量,传递并存储至第二层级控件对应的相应局部变量,然后再由第二层级控件的局部变量传递至第三层级控件对应的相应局部变量。这样导致的结果是,在系统内部,为同一个直播间的属性信息,维护了多个存储地址不同的局部变量。在进行属性信息获取时,需要对多个局部变量进行多次寻址及数据获取。一旦某个局部变量的数据错误或寻址路径出错,都会导致直播间页面上的显示出现紊乱。

现有的以多个局部变量形式存储直播间属性信息的方式,难以兼顾程序稳定性和直播间属性信息获取的简便性与高效性。



技术实现要素:

本发明实施例提供一种直播间属性信息获取方法、装置、设备及存储介质,以兼顾直播间属性信息获取的简便性与高效性,以及程序的运行稳定性。

第一方面,本发明实施例提供了一种直播间属性信息获取方法,包括:

接收用户对目标直播间的操作信息;

当所述操作信息满足属性信息获取条件时,调用预定义封装信息类的封装获取函数,从静态内存区获取所述目标直播间的属性信息,其中,所述静态内存区存储所述属性信息。

可选地,在所述当所述操作信息满足属性信息获取条件时,调用预定义封装信息类的封装获取函数,从静态内存区获取所述目标直播间的属性信息之前,还包括:

当所述操作信息满足属性信息存储条件时,调用所述预定义的封装信息类的封装存储函数,预先将所述属性信息存储至所述静态内存区。

进一步地,所述封装存储函数和所述封装获取函数均为静态函数。

可选地,所述当所述操作信息满足属性信息获取条件时,调用预定义封装信息类的封装获取函数,从静态内存区获取所述目标直播间的属性信息包括:

当判断直播间切换完成时,将切换之后的直播间更新为目标直播间;

调用预定义封装信息类的封装获取函数,从静态内存区获取更新后的所述目标直播间的属性信息。

进一步地,在所述当判断直播间切换完成时,将切换之后的直播间更新为目标直播间之后,还包括:

调用所述封装存储函数,将更新之后的所述目标直播间的属性信息更新至所述静态内存区。

可选地,所述当判断直播间切换完成时,将切换之后的直播间更新为目标直播间包括:

获取直播间切换状态标识值;

若所述直播间切换状态标识值为预设状态标识值,则判断直播间切换完成,并将切换之后的直播间更新为目标直播间。

其中,所述直播间切换状态标识值包括切换开始标识值、切换中程标识值及切换完成标识值。

可选地,所述属性信息包括直播间标识信息、直播间名称及直播间创建日期。

第二方面,本发明实施例还提供了一种直播间属性信息获取装置,该装置包括:

操作信息接收模块,用于接收用户对目标直播间的操作信息;

属性信息获取模块,用于当所述操作信息满足属性信息获取条件时,调用预定义封装信息类的封装获取函数,从静态内存区获取所述目标直播间的属性信息,其中,所述静态内存区存储所述属性信息。

可选地,在上述装置的基础上,该装置还包括:

属性信息存储模块,用于在所述当所述操作信息满足属性信息获取条件时,调用预定义封装信息类的封装获取函数,从静态内存区获取所述目标直播间的属性信息之前,当所述操作信息满足属性信息存储条件时,调用所述预定义的封装信息类的封装存储函数,预先将所述属性信息存储至所述静态内存区。

进一步地,所述封装存储函数和所述封装获取函数均为静态函数。

可选地,所述属性信息获取模块包括:

目标直播间更新子模块,用于当判断直播间切换完成时,将切换之后的直播间更新为目标直播间;

属性信息获取子模块,用于调用预定义封装信息类的封装获取函数,从静态内存区获取更新后的所述目标直播间的属性信息。

进一步地,在上述装置的基础上,该装置还包括:

属性信息更新模块,用于在所述当判断直播间切换完成时,将切换之后的直播间更新为目标直播间之后,调用所述封装存储函数,将更新之后的所述目标直播间的属性信息更新至所述静态内存区。

可选地,所述目标直播间更新子模块具体用于:

获取直播间切换状态标识值;

若所述直播间切换状态标识值为预设状态标识值,则判断直播间切换完成,并将切换之后的直播间更新为目标直播间。

其中,所述直播间切换状态标识值包括切换开始标识值、切换中程标识值及切换完成标识值。

可选地,所述属性信息包括直播间标识信息、直播间名称及直播间创建日期。

第三方面,本发明实施例还提供了一种设备,该设备包括:

一个或多个处理器;

存储装置,用于存储一个或多个程序,

当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明任意实施例所提供的直播间属性信息获取方法。

第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现本发明任意实施例所提供的直播间属性信息获取方法。

本发明实施例通过调用预定义封装信息类的封装获取函数,从静态内存区获取所述目标直播间的属性信息,解决了现有通过局部变量逐层传递属性信息而导致的,属性信息获取过程复杂、出错率高和程序运行不稳定等问题,使得直播间中任意层级的控件均能够直接从静态内存区获取直播间的属性信息,提高了属性信息获取的便捷性及高效性,进而提高了程序运行的稳定性。

附图说明

图1是本发明实施例一中的一种直播间属性信息获取方法的流程图;

图2是本发明实施例二中的一种直播间属性信息获取方法的流程图;

图3是本发明实施例三中的一种直播间属性信息获取装置的结构示意图;

图4是本发明实施例四中的一种设备的结构示意图。

具体实施方式

下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。

实施例一

本实施例提供的一种直播间属性信息获取方法,可适用于直播应用程序内部进行直播间属性信息的获取。该方法可以由直播间属性信息获取装置来执行,该装置可以由软件和/或硬件的方式实现,该装置可以集成在安装有直播应用程序的智能设备中,例如典型的是用户终端设备,例如手机、平板电脑、台式电脑或智能电视等。参见图1,本实施的方法具体包括如下步骤:

s110、接收用户对目标直播间的操作信息。

其中,目标直播间是指用户正在观看的、且会产生操作行为的直播间。操作信息是指用户对直播间的操作行为及对应的操作指令。比如,用户对直播间进行点击,那么其对应的操作信息则为点击行为和打开直播间的操作指令;再比如,用户对直播间进行切换,则操作信息为切换行为及切换直播间的操作指令;又比如,用户对直播间发布一条弹幕,则操作信息为输入行为及输入弹幕的操作指令等。

s120、当所述操作信息满足属性信息获取条件时,调用预定义封装信息类的封装获取函数,从静态内存区获取所述目标直播间的属性信息。

其中,属性信息是指直播间所特有的,能够对不同直播间进行区分的信息。示例性地,所述属性信息包括直播间标识信息、直播间名称及直播间创建日期。属性信息获取条件是指能够触发获取属性信息的触发条件,其可以是引起直播间页面内展示信息显示或变化的触发指令,例如可以是网络故障或应用程序页面更新等原因引起的应用程序内部触发指令,或者可以是用户操作对应的操作指令,比如用户打开或切换直播间的打开操作指令或切换操作指令,再比如用户发表评论、发布弹幕、赠送礼物等的交互操作指令等。

预定义封装信息类是指预先定义的、用于管理直播间属性信息的类,其内可定义成员变量和成员函数,成员变量可用于表征不同的属性信息,成员函数可用于对成员变量进行操作,比如成员变量的存储与获取等,这样能够保证成员变量的操作安全性,降低程序出错率。类内部的成员变量和成员函数的实现相对于类的外部而言,处于封装、不可见状态。

用类来管理属性信息,相当于将各个属性信息以组合的形式进行统一管理。每个直播间可对应一个类的实例化,即对象,该对象就是将其对应的直播间的属性信息分别赋值给类内的成员变量。后续对于该对象的操作,可理解为对组合的属性信息的操作。那么,如果要管理某个直播间的属性信息,那么只需管理该直播间对应的对象即可,极大地提高了属性信息的管理效率。并且,一个类的所有实例化对象中变量的存储地址均相同,即所有对象中变量的存储地址均为同一个内存地址,减少了属性信息获取过程中逐层查询不同的存储地址的情况。

本发明实施例中,根据直播间的属性信息,对封装信息类的定义进行举例说明。首先定义一个直播间类roominfo;然后在roominfo类中分别定义与直播间相关的各个字段信息,例如在roominfo类中定义一个字符串(string)类型的id变量,用于标记该直播间的直播间标识信息,在roominfo类中定义一个字符串(string)类型的name变量,用于标记直播间名称,在roominfo类中定义一个日期(date)类型的data变量,用于标记直播间创建日期。通过上述直播间类的定义,将直播间的所有属性信息封装到一个roominfo类中,可将分散的直播间属性信息进行统一管理。

示例性地,所述静态内存区存储所述属性信息。

考虑到类内的变量均存储于堆内存中,堆内存的内存分配属于一种动态内存分配,其内的数据在使用完成后有可能被系统释放掉,如果不及时释放掉有可能会产生内存泄漏的问题。那么,为了便于信息管理及降低程序出错率,本发明实施例中进一步将封装信息类中的成员变量定义为静态的、全局的变量。这样能够使得变量值(即属性信息)存储在内存的静态区(即静态内存区)中,从而保证变量的存储地址固定不变,即所有对象中变量的存储地址不仅均为同一个内存地址,而且均为同一个固定不变的内存地址,这样就直接去除了属性信息获取时逐层查询存储地址的过程,而是直接定位至固定的存储地址。

比如,对于上述直播间类roominfo而言,定义静态的、全局的变量的实现方法是定义一个静态的roominfo对象,具体是通过privatestaticroominforoominfo的方式来定义一个静态的roominfo对象,这样后期roominfo的内容将会是在系统内存块中的静态内存区中来进行存储的。

为了方便对静态内存区中的数据进行存储和获取,在封装消息类内定义了两个成员函数:封装存储函数和封装获取函数,分别用于存储属性信息至静态内存区,以及从上述静态内存区获取属性信息。示例性地,所述封装存储函数和所述封装获取函数均为静态函数。也就是说,在定义封装存储函数和封装获取函数时,将其声明为静态类型,比如通过static关键词进行定义。这样设置的好处在于,可以直接通过封装信息类来调用封装存储函数和封装获取函数,而不必每次都通过实例化的对象来调用相关成员函数,从而提高函数调用简便性,进而降低出错率。

比如,上述成员函数可定义为:publicstaticvoidsetroominfo(roominforoominfo)和publicstaticroominfogetroominfo()。其中,setroominfo的内部实现原理是通过将传递的参数roominfo中的属性信息缓存到上述静态内存区的对象roominfo中。具体缓存的方法是将参数roominfo中的数据逐一取出并设置到静态内存区中的roominfo对象中。getroominfo的实现原理是直接将静态内存区中的roominfo对象来进行返回即可。

具体地,将接收的操作信息与属性信息获取条件进行比较,如果操作信息满足属性信息获取条件,比如操作信息为弹幕输入操作指令或者评论操作指令等,其属于交互操作指令,那么判定操作信息满足了属性信息获取条件,则调用预定义封装信息类的封装获取函数,以从静态内存区中获取目标直播间的属性信息。

示例性地,在所述当所述操作信息满足属性信息获取条件时,调用预定义封装信息类的封装获取函数,从静态内存区获取所述目标直播间的属性信息之前,还包括:当所述操作信息满足属性信息存储条件时,调用所述预定义的封装信息类的封装存储函数,预先将所述属性信息存储至所述静态内存区。

其中,属性信息存储条件是指能够触发存储属性信息的触发条件,其可以是引起直播间变化的触发指令,例如可以是用户打开直播间的打开操作指令。

具体地,当判定操作信息满足属性信息存储条件时,调用预定义的封装信息类内的封装存储函数,将从网络端请求获得的属性信息,按照封装信息类的结构类型,预先存储至静态内存区。这样设置的好处在于,能够以类的数据结构,预先将网络端获取的属性信息存储在静态内存区,便于后续属性信息获取操作的执行,能够提高属性信息获取效率

本实施例的技术方案,通过调用预定义封装信息类的封装获取函数,从静态内存区获取所述目标直播间的属性信息,解决了现有通过局部变量逐层传递属性信息而导致的,属性信息获取过程复杂、出错率高和程序运行不稳定等问题,使得直播间中任意层级的控件均能够直接从静态内存区获取直播间的属性信息,提高了属性信息获取的便捷性及高效性,进而提高了程序运行的稳定性。

实施例二

本实施例在上述实施例一的基础上,对“当所述操作信息满足属性信息获取条件时,调用预定义封装信息类的封装获取函数,从静态内存区获取所述目标直播间的属性信息”进行了进一步优化。其中与上述各实施例相同或相应的术语的解释在此不再赘述。参见图2,本实施例提供的直播间属性信息获取方法包括:

s210、接收用户对目标直播间的操作信息。

s220、当判断直播间切换完成时,将切换之后的直播间更新为目标直播间。

具体地,直播应用程序中的多个控件,在获取直播间属性信息的过程中,会出现因直播间的切换而导致的属性信息获取异常的情况。例如,当用户对目标直播间进行切换的过程中,用户对切换前的目标直播间的某一个交互操作,触发了属性信息的获取过程。那么,直播应用程序所获取到的属性信息,要么是上一个目标直播间的属性信息,要么是空的属性信息。如果获取到的是上一个目标直播间的属性信息,由于已经切换了直播间,针对获取到的属性数据的响应不该加载于切换之后的直播间内,那么该次获取的数据就为多余数据或错误数据。如果获取的是空的属性信息,那么就会导致空指针异常情况的发生,从而引发程序运行错误。所以,针对直播间切换的特殊情况,本发明实施例中,在获取属性信息之前,增加了目标直播间更新的操作。

具体实施时,可以通过标识直播间切换状态的标识值,或者直播间切换完成之后发出的更新直播间的更新指令,来判断直播间是否切换完成。当判定直播间切换完成时,将切换之后的直播间更新为目标直播间。

示例性地,所述当判断直播间切换完成时,将切换之后的直播间更新为目标直播间包括:获取直播间切换状态标识值;若所述直播间切换状态标识值为预设状态标识值,则判断直播间切换完成,并将切换之后的直播间更新为目标直播间。

其中,直播间切换状态标识值是指标识直播间切换状态的标识值,其可以包括切换开始标识值、切换中程标识值及切换完成标识值。预设状态标识值是指预先设定的、标识直播间切换完成的标识值。

具体地,在直播应用程序中,设置一个直播间切换状态标识变量,比如设置一个枚举类型的变量roomtype,该枚举变量的值即为直播间切换状态标识值,其可对应有三个值,分别是切换开始标识值1、切换中程标识值2及切换完成标识值3。在更新目标直播间之前,先获取直播间切换状态标识值,以对直播间的切换状态进行判断。其获取过程可以是主动获取相应变量的值,也可以是相应变量将直播间切换状态标识值广播,被动接收该标识值。这里对直播间切换状态标识值的广播形式进行说明。当直播间开始切换的时候,首先会将该枚举变量的值赋值为1,然后将该枚举变量的状态广播出去,这样所有的控件就能够接收到当前直播间开始切换的状态信息。当直播间在切换过程中的时候会将枚举变量赋值为2,然后将该枚举变量广播出去。当直播间信息切换完成的时候会将枚举变量赋值成3,然后再将其广播出去。

获取到直播间切换状态标识值之后,将其与预设状态标识值进行比较。当两者一致时,判断直播间切换完成,之后将切换之后的直播间更新为目标直播间。

示例性地,在所述当判断直播间切换完成时,将切换之后的直播间更新为目标直播间之后,还包括:调用所述封装存储函数,将更新之后的所述目标直播间的属性信息更新至所述静态内存区。

具体地,在目标直播间更新完成之后,调用封装信息类的封装存储函数,将更新之后的目标直播间的属性信息存储至静态内存区,以覆盖原有的属性信息,完成属性信息的更新。这样能够使得静态内存区的属性信息始终与用户当前观看的目标直播间一致,从而避免属性信息获取错误的情况发生。而且,能够减少属性信息存储条件的判断步骤,提高属性信息更新速率。

s230、调用预定义封装信息类的封装获取函数,从静态内存区获取更新后的所述目标直播间的属性信息。

具体地,在目标直播间更新之后,通过调用预定义封装信息类的封装获取函数,将静态内存区中更新之后的属性信息返回,以保证待获取属性信息的控件所获得的属性信息的正确性。

本实施例的技术方案,通过对直播间的切换状态进行判断,并在直播间切换完成之后更新目标直播间及静态内存区的相应属性信息,能够使得目标直播间与属性信息的变换保持同步,从而降低属性信息获取错误率,进一步提高属性信息获取的高效性与程序运行的稳定性。

以下是本发明实施例提供的直播间属性信息获取装置的实施例,该装置与上述各实施例的直播间属性信息获取方法属于同一个发明构思,在直播间属性信息获取装置的实施例中未详尽描述的细节内容,可以参考上述直播间属性信息获取方法的实施例。

实施例三

本实施例提供一种直播间属性信息获取装置,参见图3,该装置具体包括:

操作信息接收模块310,用于接收用户对目标直播间的操作信息;

属性信息获取模块320,用于当所述操作信息满足属性信息获取条件时,调用预定义封装信息类的封装获取函数,从静态内存区获取所述目标直播间的属性信息,其中,所述静态内存区存储所述属性信息。

可选地,在上述装置的基础上,该装置还包括:

属性信息存储模块,用于在所述当所述操作信息满足属性信息获取条件时,调用预定义封装信息类的封装获取函数,从静态内存区获取所述目标直播间的属性信息之前,当所述操作信息满足属性信息存储条件时,调用所述预定义的封装信息类的封装存储函数,预先将所述属性信息存储至所述静态内存区。

进一步地,所述封装存储函数和所述封装获取函数均为静态函数。

可选地,所述属性信息获取模块320包括:

目标直播间更新子模块,用于当判断直播间切换完成时,将切换之后的直播间更新为目标直播间;

属性信息获取子模块,用于调用预定义封装信息类的封装获取函数,从静态内存区获取更新后的所述目标直播间的属性信息。

进一步地,在上述装置的基础上,该装置还包括:

属性信息更新模块,用于在所述当判断直播间切换完成时,将切换之后的直播间更新为目标直播间之后,调用所述封装存储函数,将更新之后的所述目标直播间的属性信息更新至所述静态内存区。

可选地,所述目标直播间更新子模块具体用于:

获取直播间切换状态标识值;

若所述直播间切换状态标识值为预设状态标识值,则判断直播间切换完成,并将切换之后的直播间更新为目标直播间。

其中,所述直播间切换状态标识值包括切换开始标识值、切换中程标识值及切换完成标识值。

可选地,所述属性信息包括直播间标识信息、直播间名称及直播间创建日期。

通过本发明实施例三的一种直播间属性信息获取装置,解决了现有通过局部变量逐层传递属性信息而导致的,属性信息获取过程复杂、出错率高和程序运行不稳定等问题,使得直播间中任意层级的控件均能够直接从静态内存区获取直播间的属性信息,提高了属性信息获取的便捷性及高效性,进而提高了程序运行的稳定性。

本发明实施例所提供的直播间属性信息获取装置可执行本发明任意实施例所提供的直播间属性信息获取方法,具备执行方法相应的功能模块和有益效果。

值得注意的是,上述直播间属性信息获取装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。

实施例四

参见图4,本实施例提供了一种设备400,其包括:一个或多个处理器420;存储装置410,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器420执行,使得所述一个或多个处理器420实现本发明实施例所提供的直播间属性信息获取方法,包括:

接收用户对目标直播间的操作信息;

当所述操作信息满足属性信息获取条件时,调用预定义封装信息类的封装获取函数,从静态内存区获取所述目标直播间的属性信息,其中,所述静态内存区存储所述属性信息。

当然,本领域技术人员可以理解,处理器420还可以实现本发明任意实施例所提供的……方法的技术方案。

图4显示的设备400仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。

如图4所示,该设备400包括处理器420、存储装置410、输入装置430和输出装置440;设备中处理器420的数量可以是一个或多个,图4中以一个处理器420为例;设备中的处理器420、存储装置410、输入装置430和输出装置440可以通过总线或其他方式连接,图4中以通过总线450连接为例。

存储装置410作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的直播间属性信息获取方法对应的程序指令/模块(例如,直播间属性信息获取装置中的操作信息接收模块和属性信息获取模块)。

存储装置410可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储装置410可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储装置410可进一步包括相对于处理器420远程设置的存储器,这些远程存储器可以通过网络连接至设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

输入装置430可用于接收输入的数字或字符信息,以及产生与设备的用户设置以及功能控制有关的键信号输入。输出装置440可包括显示屏等显示设备。

实施例五

本实施例提供一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行一种直播间属性信息获取方法,该方法包括:

接收用户对目标直播间的操作信息;

当所述操作信息满足属性信息获取条件时,调用预定义封装信息类的封装获取函数,从静态内存区获取所述目标直播间的属性信息,其中,所述静态内存区存储所述属性信息。

当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本发明任意实施例所提供的直播间属性信息获取方法中的相关操作。

通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、闪存(flash)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的直播间属性信息获取方法。

注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1